Grep: busca y reemplaza la línea completa

13

El comando

 grep "foo" myfile.txt

imprime todas las líneas coincidentes en mi archivo.

Ahora quiero reemplazar la línea completa con otra cadena. ¿Cómo puedo hacer eso?

abrazadera
fuente

Respuestas:

13

Si está haciendo coincidir una subcadena de toda la línea, puede usar el scomando sed con una expresión regular para limpiar el resto de la línea:

sed -i 's/^.*foo.*$/another string/' myfile.txt

o use el ccomando para reemplazar la línea coincidente de una vez:

sed -i '/foo/ { c \
another string
}' myfile.txt

Si no desea escribir comandos multilínea en el indicador, puede colocarlo en un script:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt
Inútil
fuente
¡Gracias! cuando uso la segunda opción obtengo: sed: -e expresión # 1, char 0: incomparable `{'
abrazadera
al final de la primera línea, debe escribir \ y luego presionar Retorno ; es importante que \ escape esa primera línea nueva. Luego, asegúrese de que }'esté en una línea separada de another string: el reemplazo es todo en esa segunda línea, incluso }si la coloca allí.
Inútil
-1

Puede usar la funcionalidad in situ de sed :

sed -i -e 's/foo/bar/' myfile.txt
Coren
fuente
Esto solo reemplazará cada uno foocon barno toda la línea ..
Jahid