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 sed
tiene 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.txt
es 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íneainsert.txt
el archivo de texto dondeTHEKEYWORD
existe
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.txt
podrí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