2つのパターンの間にあるファイルのすべての行を別のファイルに挿入する

2つのパターンの間にあるファイルのすべての行を別のファイルに挿入する

ファイル1の内容:

1111
2222
3333
4444

ファイル2の内容:

[webservers]
[databases]

file2の内容を次のように作成したいと思います。すべての行を追加したら、新しい行を挿入します。

[webservers]
1111
2222
3333
4444

[databases]

答え1

パターンの後にファイルを追加するにはreadコマンドを使用し、改行を挿入するには代替コマンドを使用します。seds

sed -e '/\[webservers]/r file1' -e 's/\[databases]/\           
   &/' file2

上記のように、改行文字を代替パターンに含めるには、バックスラッシュを使用してエスケープする必要があります(一致全体を表す&ため、一致は改行文字の前にそれ自体で置き換えられます)。

[特別な意味を抑制するにはエスケープが必要です。

答え2

拡張正規表現モードを備えたGNU sed。

追加するファイルに末尾の改行文字を追加するには、ここでSedコマンド "a"を使用することもできます。

sed -E \
  -e '/\[webservers]/r file1' \
  -e '/\[databases\]/r file3' \
  -e '/\[webservers]|\[databases]/a\
' \
file2 >hosts

関連情報