grep并替换多个文件之间的多个字符串

时间:2013-12-09 18:39:21

标签: regex scripting sed grep

我有多个XML文件,其字符串都设置为

<msg type="Status"

这些字符串中的一些应该是“警告”类型,我有一个带警告字符串的单独文本文件。

我可以做一个

  

grep -f strings.txt * .xml

这允许我查看哪些警告字符串被错误地列为状态字符串。我想做的是

  

grep -f strings.txt * .xml | sed's / status / warning /'

这给了我想要的输出,但它只显示(未保存)。有多个xml文件,所以我不能只将输出保存到一个文件。我需要sed来替换它源自的原始.xml文件中的字符串。谢谢你的帮助。

3 个答案:

答案 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