我正在尝试在XML文件中搜索一些文本,文本为:
</p_dpopis>
<IMGURL>
并将其替换为:
</p_dpopis>
<p_vyrobce>NONAME</p_vyrobce>
<IMGURL>
这是我用perl尝试的,没有任何运气:
perl -0pe 's|</p_dpopis>.*\n.*<IMGURL>|replacement|' myxml.xml
这里有什么问题?
答案 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)来解决各种恶作剧。