文件1内容:
1111
2222
3333
4444
文件2内容:
[webservers]
[databases]
我希望 file2 内容如下所示: 添加所有行后,插入新行。
[webservers]
1111
2222
3333
4444
[databases]
答案1
使用r
ead 命令sed
在模式后附加文件,使用s
ubstitute 命令插入换行符:
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