Cómo insertar una cadena en una línea en un archivo después de una palabra clave en bash

Aug 20 2020

Tengo un archivo con algunas líneas.

Lines.txt

value1
value2
value3

Y me gustaría agregar las líneas del archivo a otro archivo después de una palabra clave.

AnotherFile.txt

NotTheKeyWord SomeOtherStuff SomeOtherStuff
NotTheKeyWord THEKEYWORD SomeOtherStuff SomeOtherStuff

Creo que sedtiene lo que necesito, pero tengo problemas para averiguar cómo insertar el texto en el medio de la línea.

Y quiero el resultado de:

AnotherFile.txt

NotTheKeyWord SomeOtherStuff SomeOtherStuff
NotTheKeyWord THEKEYWORD value1 value2 value3 SomeOtherStuff SomeOtherStuff

Respuestas

1 0stone0 Aug 20 2020 at 21:19

Una solución pura de sed :

sed -r "s:(THEKEYWORD):\1 $(sed ':a;N;$!ba;s/\n/ /g' test.txt) :g" insert.txt

Dónde;

  • test.txtes el valor que se va a insertar, $(sed ':a;N;$!ba;s/\n/ /g' test.txt)elimina cualquier nueva línea del archivo, por lo que se puede insertar en la misma línea
  • insert.txtel archivo de texto donde THEKEYWORDexiste

Si desea reemplazar el archivo, use la -iopción;

sed -i -r "s:(THEKEYWORD):\1 $(gsed ':a;N;$!ba;s/\n/ /g' test.txt) :g" insert.txt

Como señaló @KamilCuk, el uso paste -sd ' ' test.txtpodría usarse para eliminar las nuevas líneas e insertar el archivo;

sed -r "s:(THEKEYWORD):\1 $(paste -sd ' ' test.txt) :g" insert.txt

Salida terminal + versión sed