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?

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

¡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

Esto solo reemplazará cada uno foocon barno toda la línea ..
Jahid
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.