パターンの後ろに別のファイルにファイルを挿入 [重複]

パターンの後ろに別のファイルにファイルを挿入 [重複]

最初の埋め込み行の後にaファイルの内容(後に改行文字)をファイルに挿入するにはどうすればよいですか?bPATTERN

ベストアンサー1

sed '/pattern/{r file_b
a\

:f
n; b f
}' file_a

file_b改行文字で終了し、出力に空行が必要ない場合は、a\スクリプトからその行を省略してください。

最後の行で:fラベルが定義され、n改行文字が読み取られ(-nオプションが指定されていないために自動的に印刷されsed) 、b fそのfラベルに分岐してループが生成されます。これはすべてfile_b次に追加するために行われます。最初ラインマッチングモード。file_b後で追加したい場合ラインマッチングはpatternはるかに簡単です。

sed '/pattern/r file_b' file_a

例:

$ cat file_a
first
second
third
fourth
first
second
third
fourth
$ cat file_b
b1
b2
b3

$ sed '/second/{r file_b
:f n; b f }' file_a
first
second
b1
b2
b3
third
fourth
first
second
third
fourth

$ printf "x\ny\nz" >file_c
$ sed '/second/{r file_c
a
:f n; b f }' file_a
first
second
x
y
z
third
fourth
first
second
third
fourth

$ sed '/second/r file_b' file_a
first
second
b1
b2
b3
third
fourth
first
second
b1
b2
b3
third
fourth

もう1つの解決策は、次のものを使用することですed(1)(POSIXで義務付けられ、約45年間すべてのUNIXシステムに存在しているにもかかわらず、驚くべきことに、最新のLinuxディストリビューションではデフォルトでは使用できません)。

echo '/pattern/r file_b
w' | ed file_a

これにより、その場所で編集され、改行文字が追加されます(file_a末尾に;がある場合)。file_b出力を別のファイルに書き込むには、wに変更しますw output_file

おすすめ記事