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.txtTHEKEYWORD存在するテキストファイル

ファイルを置き換える場合は、-iオプションを使用します。

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

@KamilCukが指摘したように、usingをpaste -sd ' ' test.txt使用して改行を削除し、ファイルを挿入することができます。

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

ターミナル出力+ sedバージョン