在特定模式匹配后插入文件的内容

时间:2013-05-23 13:35:31

标签: regex linux sed

我想在特定模式匹配时插入文件内容。以下是一个示例:在file2.txtfile1.txt之间<tag>添加</tag>个内容。

file1.txt

<html>
<body>
<tag>
</tag>
</body>
</html>

file2.txt

Hello world!!

我试过以下但没有用。

# sed "/\<tag\>/ {
h
r file2.txt
g
N
}" file1.txt

<html>
<body>
Hello World!!
<tag>
</tag>
</body>
</html>

1 个答案:

答案 0 :(得分:45)

尝试以下命令:

sed '/<tag>/ r file2.txt' file1.txt

它产生:

<html>
<body>
<tag>
Hello world
</tag>
</body>
</html>

编辑以解释为什么您的命令无法正常工作:r filename命令在当前周期结束时或读取下一个输入行时添加其内容。并且您正在使用N命令,该命令除了读取下一行之外不打印任何内容,因此在那时打印Hello world,然后打印正常的行流。

在我的情况下,它用<tag>读取行,然后结束循环,所以打印行,然后打印文件的内容并继续阅读直到结束。