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 porpatt
, entonces realice las acciones descritas dentro de{}
. - En este caso:
/^all:/ {$0=$0" anotherthing"}
si la línea comienza (representada por^
) conall:
luego agregueanotherthing
a la línea. -
1
como una condición verdadera, desencadena la acción predeterminada deawk
: 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.