最初の埋め込み行の後に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
。