我有多个XML文件,其字符串都设置为
<msg type="Status"
这些字符串中的一些应该是“警告”类型,我有一个带警告字符串的单独文本文件。
我可以做一个
grep -f strings.txt * .xml
这允许我查看哪些警告字符串被错误地列为状态字符串。我想做的是
grep -f strings.txt * .xml | sed's / status / warning /'
这给了我想要的输出,但它只显示(未保存)。有多个xml文件,所以我不能只将输出保存到一个文件。我需要sed来替换它源自的原始.xml文件中的字符串。谢谢你的帮助。
答案 0 :(得分:2)
你很近而不是grep -f strings.txt *.xml | sed 's/status/warning/'
DO
grep -l strings.txt *.xml | xargs sed -i 's/status/warning/g'
您忘记使用xargs
,请阅读here了解有关xargs
的更多信息。
答案 1 :(得分:0)
建议尝试xmllint。使用--pattern
选项,您可以指定xpath搜索查询,以准确搜索您需要查找的内容,而无需复杂的正则表达式。
答案 2 :(得分:0)
使用xpath作为查询语言的Perl脚本xml_grep: http://search.cpan.org/dist/XML-Twig/tools/xml_grep/xml_grep
xml_grep '//msg[@type="Warning"]' *.xml