![パターンの後ろに別のファイルにファイルを挿入 [重複]](https://linux33.com/image/140242/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AE%E5%BE%8C%E3%82%8D%E3%81%AB%E5%88%A5%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8C%BF%E5%85%A5%20%5B%E9%87%8D%E8%A4%87%5D.png)
最初の埋め込み行の後にa
ファイルの内容(後に改行文字)をファイルに挿入するにはどうすればよいですか?b
PATTERN
答え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
。
答え2
どうですか?
sed '/PATTERN/r a' b