Как вставить строку в строку в файле после ключевого слова в bash

Aug 20 2020

У меня есть файл с несколькими строками.

Lines.txt

value1
value2
value3

И я хотел бы добавить строки в файле в другой файл после ключевого слова.

AnotherFile.txt

NotTheKeyWord SomeOtherStuff SomeOtherStuff
NotTheKeyWord THEKEYWORD SomeOtherStuff SomeOtherStuff

Я думаю sed, что есть то, что мне нужно, но у меня возникают проблемы с тем, как вставить текст в середину строки.

И мне нужен результат:

AnotherFile.txt

NotTheKeyWord SomeOtherStuff SomeOtherStuff
NotTheKeyWord THEKEYWORD value1 value2 value3 SomeOtherStuff SomeOtherStuff

Ответы

1 0stone0 Aug 20 2020 at 21:19

Чистое решение sed :

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

Где;

  • test.txt- это значение, которое нужно вставить, $(sed ':a;N;$!ba;s/\n/ /g' test.txt)удаляет любые символы новой строки из файла, поэтому его можно вставить в ту же строку
  • insert.txtтекстовый файл, если он THEKEYWORDсуществует

Если вы хотите заменить файл, используйте -iопцию;

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

Как отметил @KamilCuk, использование paste -sd ' ' test.txtможно использовать для удаления новых строк и вставки файла;

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

Вывод терминала + версия sed