Как вставить строку в строку в файле после ключевого слова в 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