reemplazar linea insertar espacios eliminar comando caracter blanco añadir bash sed awk

bash - linea - sed linux



Cómo agregar al final de las líneas que contienen un patrón con sed o awk? (6)

Aquí hay otra solución simple que usa sed.

$ sed -i ''s/all.*/& anotherthing/g'' filename.txt

Explicación:

todo. * significa que todas las líneas comenzaron con ''todo''.

& representa la coincidencia (es decir, la línea completa que comienza con ''todo'')

luego sed reemplaza el primero con el último y agrega la palabra ''anotherrthing''

Aquí está el archivo de ejemplo:

somestuff... all: thing otherthing some other stuff

Lo que quiero hacer es agregar a la línea que comienza con all: así:

somestuff... all: thing otherthing anotherthing some other stuff


En bash:

while read -r line ; do [[ $line == all:* ]] && line+=" anotherthing" echo "$line" done < filename


Esto debería funcionar para ti

sed -e ''s_^all: .*_& anotherthing_''

Usando s comando (sustituto) puede buscar una línea que satisfaga una expresión regular. En el comando de arriba, & representa la cadena coincidente.


Esto funciona para mí

sed ''/^all:/ s/$/ anotherthing/'' file

La primera parte es un patrón para encontrar y la segunda parte es una sustitución de sed común usando $ para el final de una línea.

Si desea cambiar el archivo durante el proceso, use la opción -i

sed -i ''/^all:/ s/$/ anotherthing/'' file

O puede redirigirlo a otro archivo

sed ''/^all:/ s/$/ anotherthing/'' file > output


Puede agregar el texto a $0 en awk si coincide con la condición:

awk ''/^all:/ {$0=$0" anotherthing"} 1'' file

Explicación

  • /patt/ {...} si la línea coincide con el patrón dado por patt , entonces realice las acciones descritas dentro de {} .
  • En este caso: /^all:/ {$0=$0" anotherthing"} si la línea comienza (representada por ^ ) con all: luego agregue anotherthing a la línea.
  • 1 como una condición verdadera, desencadena la acción predeterminada de awk : imprima la línea actual ( print $0 ). Esto sucederá siempre, por lo que imprimirá la línea original o la línea modificada.

Prueba

Para su entrada dada, regresa:

somestuff... all: thing otherthing anotherthing some other stuff

Tenga en cuenta que también puede proporcionar el texto para agregar en una variable:

$ awk -v mytext=" EXTRA TEXT" ''/^all:/ {$0=$0mytext} 1'' file somestuff... all: thing otherthing EXTRA TEXT some other stuff


Solución con awk:

awk ''{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}'' file

Simplemente: si la fila comienza con all imprima la fila más "anotherrthing", de lo contrario imprima solo la fila.