¿Cómo encuentro una cadena en un archivo y coloco una cadena encima?

Me gustaría encontrar la Cadena __MARKER__y someFile.txtcolocar una Cadena encima (p. ej. Hello World!).

¿Cómo haría eso usando sed?

sed -i -e 's/__MARKER__/Hello world\n__MARKER__/' someFile.txt

Sin embargo, después de ejecutar el fragmento anterior, el contenido de someFile.txtestá a continuación:

Hello worldn__MARKER__

Contenido de someFile.txtantes de la manipulación:

__MARKER__

Contenido de someFile.txtdespués de la manipulación:

Hello World!
__MARKER__
También se preguntó aquí: askubuntu.com/q/1044271/10127 : ¿las respuestas no funcionaron para usted?

Respuestas (2)

s/…/…/es una sustitución, reemplazando el primero por el segundo . Puede usar una nueva línea en su cadena para insertar texto arriba o debajo de un salto de línea.

sed -i -e 's/__MARKER__/Hello world\
__MARKER__/' someFile.txt

Escape la nueva línea con una barra invertida, de lo contrario obtendrá "nueva línea sin escape dentro del patrón de sustitución". Para escribir una nueva línea en Terminal, use ⌥↩︎.

Puede usarlo &como abreviatura para la coincidencia, por lo que no necesita volver a escribirlo en el reemplazo.

sed -i -e 's/__MARKER__/Hello world\
&/' someFile.txt
¿ Qué pasa si someFile.txttiene // __MARKER__en él? Note el //. ¿Tengo que escapar?
@Nicholas Entonces te seguirán // Hello worlden __MARKER__la línea después. No estoy seguro de a qué se refiere con escape //, la sustitución busca únicamente la cadena de marcador y la reemplaza con la sustitución.

Otra opción es sedla función de inserción .

aporte:

cat someFile.txt

producción:

apple
orange
grape
pineapple
plum
_MARKER_
banana


aporte:

sed '/_MARKER_/i\
Hello World!
' someFile.txt

producción:

apple
orange
grape
pineapple
plum
Hello World!
_MARKER_
banana