将一个文件的所有行插入到两个模式之间的另一个文件中

将一个文件的所有行插入到两个模式之间的另一个文件中

文件1内容:

1111
2222
3333
4444

文件2内容:

[webservers]
[databases]

我希望 file2 内容如下所示: 添加所有行后,插入新行。

[webservers]
1111
2222
3333
4444

[databases]

答案1

使用read 命令sed在模式后附加文件,使用substitute 命令插入换行符:

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

相关内容