Tengo un archivo de la siguiente manera:
line1
line2
line3
Y quiero obtener:
prefixline1
prefixline2
prefixline3
Podría escribir un script Ruby, pero es mejor si no lo necesito.
prefixcontendrá /. Es un camino, /opt/workdir/por ejemplo.
                    
                        linux
                                scripting
                                text-processing
                                
                    
                    
                        pierrotlefou
fuente
                
                
            fuente

sedtareas livianas como esta. Si se conoce el "prefijo", es muy fácil elegir un personaje que no sea del "prefijo".seden una tubería, por ejemplofoo | sed -e 's/^/x /' | bar.sed -e '2,$s/^/prefix/'./gusta\/(en cadenas de comillas simples) o\\/(en cadenas de comillas dobles)sed -e 's/$/postfix/' filesi desea agregar una cadena al final de cada línea.Con Perl (reemplazo en el lugar):
fuente
prtinf "$VARIABLE\n" | awk '$0="prefix"$0'awkinformesawk: out of memory in readrec 1 source line number 1, pero la solución sesedcompleta con éxito.Puede usar Vim en modo Ex:
%seleccione todas las líneassreemplazarxguardar y cerrarfuente
:%s/^/prefix/, ya que esta estrategia termina siendo útil en muchas situacionesSi su prefijo es un poco complicado, simplemente póngalo en una variable:
Luego, pasa esa variable y deja que awk se ocupe de ella:
fuente
Si tienes Perl:
fuente
Usando la cáscara:
fuente
Aquí hay una solución oneliner altamente legible que usa el
tscomando de moreutilsY cómo se deriva paso a paso:
fuente
Si bien no creo que pierr tuviera esta preocupación, necesitaba una solución que no retrasara la salida de la "cola" en vivo de un archivo, ya que quería monitorear varios registros de alertas simultáneamente, con el prefijo de cada línea con el nombre de su registro respectivo .
Desafortunadamente, sed, cut, etc. introdujo demasiado buffering y me impidió ver las líneas más actuales. La sugerencia de Steven Penny de usar la
-sopción denlera intrigante, y las pruebas demostraron que no introdujo el almacenamiento en búfer no deseado que me preocupaba.Sin
nlembargo, hubo un par de problemas con el uso , relacionados con el deseo de eliminar los números de línea no deseados (incluso si no le importa la estética de la misma, puede haber casos en los que no sería deseable usar las columnas adicionales). Primero, usar "cortar" para eliminar los números reintroduce el problema de almacenamiento en búfer, por lo que arruina la solución. En segundo lugar, el uso de "-w1" no ayuda, ya que esto NO restringe el número de línea a una sola columna, simplemente se amplía a medida que se necesitan más dígitos.No es bonito si quieres capturar esto en otro lugar, pero dado que eso es exactamente lo que no necesitaba hacer (ya se estaba escribiendo todo en los archivos de registro, solo quería ver varios a la vez en tiempo real), lo mejor La forma de perder los números de línea y tener solo mi prefijo era comenzar la
-scadena con un retorno de carro (CR o ^ M o Ctrl-M). Así por ejemplo:fuente
-uopción de sed para evitar el almacenamiento en búfer.Usando ed:
Esto sustituye, para cada línea (
,), el comienzo de la línea (^) conprefix.wqsalva y sale.Si la cadena de reemplazo contiene una barra oblicua, podemos usar un delimitador diferente para
s:He citado el delimitador here-doc
EOE("fin de ed") para evitar la expansión de parámetros. En este ejemplo, también funcionaría sin comillas, pero es una buena práctica evitar sorpresas si alguna vez tiene un$script ed.fuente
Usando & (toda la parte de la entrada que coincidió con el patrón ”):
O usando referencias posteriores:
fuente
También puede lograr esto utilizando la técnica de referencia
También puedes usar con awk como este
fuente
Aquí hay un ejemplo resumido usando el
sedenfoque de esta respuesta :prefix_lines
fuente
PREFIXcontiene caracteres especiales para sed como una barra inclinada.prefix_lines \*Para las personas con sistemas BSD / OSX hay una utilidad llamada
lam, abreviatura de laminado.lam -s prefix fileHará lo que quieras. Lo uso en tuberías, por ejemplo:find -type f -exec lam -s "{}: " "{}" \; | fzf... que encontrará todos los archivos, exec lam en cada uno de ellos, dando a cada archivo un prefijo de su propio nombre de archivo. (Y bombee la salida a fzf para buscar).
fuente