使用空格搜索和替换多行文本

时间:2014-09-30 21:49:28

标签: regex linux bash perl

我正在尝试在XML文件中搜索一些文本,文本为:

</p_dpopis>
    <IMGURL>

并将其替换为:

</p_dpopis>
<p_vyrobce>NONAME</p_vyrobce>
    <IMGURL>

这是我用perl尝试的,没有任何运气:

perl -0pe 's|</p_dpopis>.*\n.*<IMGURL>|replacement|' myxml.xml

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

您的语法有效:

$ cat file
</p_dpopis>
    <IMGURL>
$ perl -0pe 's|</p_dpopis>.*\n.*<IMGURL>|replacement|g' file
replacement

以下是具有相同示例文件的sed示例:

$ sed -r '/<\/p_dpopis>/{ N; s%</p_dpopis>.*\n.*<IMGURL>%replaced\ntest%g }' file
replaced
test

有关详细信息,请参阅此reference

答案 1 :(得分:0)

你错过了一个全球性的&#39;正则表达式的修饰符,使用\s+匹配任意数量的空格比指定.*\n.*容易得多。将输出发送到另一个文件也更好,而不必在终端窗口中处理它。

perl -0pe 's|</p_dpopis>\s+<IMGURL>|</p_dpopis>\n<p_vyrobce>NONAME</p_vyrobce>\n<IMGURL>|g' myxml.xml > my_new_xml.xml

如果您正在操作XML,最好使用专用的XML解析器 - 您可以通过使用正则表达式操纵不规则语言(例如XML)来解决各种恶作剧。