Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在特定模式匹配后插入文件内容_Regex_Linux_Sed - Fatal编程技术网

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

Regex 在特定模式匹配后插入文件内容,regex,linux,sed,Regex,Linux,Sed,我想在特定模式匹配处插入文件内容。下面是一个示例:在和之间的file1.txt中添加file2.txt内容 file1.txt <html> <body> <tag> </tag> </body> </html> Hello world!! 我试过跟随,但没有成功 # sed "/\<tag\>/ { h r file2.txt g N }" file1.txt <html> <body&

我想在特定模式匹配处插入文件内容。下面是一个示例:在
之间的
file1.txt
中添加
file2.txt
内容

file1.txt

<html>
<body>
<tag>
</tag>
</body>
</html>
Hello world!!
我试过跟随,但没有成功

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

<html>
<body>
Hello World!!
<tag>
</tag>
</body>
</html>
#sed”/{
H
文件2.txt
G
N
}“file1.txt
你好,世界!!
尝试以下命令:

sed '/<tag>/ r file2.txt' file1.txt
sed'//r file2.txt'file1.txt
它产生:

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

你好,世界

编辑以解释命令不能按您所需工作的原因:
r filename
命令在当前循环结束时或读取下一个输入行时添加其内容。您正在使用
N
命令,该命令不打印任何内容,只读取下一行,因此此时将打印
Hello world
,然后打印正常的行流


在我的例子中,它读取带有
的行,然后结束循环,所以打印该行,然后打印文件的内容,并继续读取直到结束。

您可以更改
,因为它是在
之前打印的。我已经尝试了
'/
,它可以工作!!!万岁..有没有办法用CDATA包装内容?我需要添加
-I.bak
来写入file1.txt
sed-i.bak'//r file2.txt'file1.txt
要在
之后插入文件来实现此功能,是否仍要执行此操作?我尝试使用
来避开反斜杠,但它不起作用。更多信息请参见我的问题:是否有一种方法可以包含包含文件的完整路径(file2.txt应该类似于/tmp/file2.txt)。我试着避开正斜杠,但没有成功work@Birei是否可以不打印“Hello World!!”行,只需插入文件的内容。我可以想象如何用sed的第二次扫描来删除这一行,问题是这是否可以在一次扫描中完成。