我想找到并将VALUE
替换为xml文件:
<test name="NAME" value="VALUE"/>
我必须按名称过滤(因为有很多这样的行)。
有可能吗?
谢谢你的帮助。
答案 0 :(得分:1)
由于您标记了问题&#34; bash&#34;,我认为您并未尝试使用XML库(尽管我认为XML专家可能会为您提供类似XSLT处理器的功能这个问题很有力地解决了这个问题),但你只是对搜索和搜索感兴趣。从命令行替换。
我正在使用perl:
perl -pi -e 's#VALUE#replacement#g' *.xml
请参阅perlrun
手册页:很快就将-p
切换到文本处理模式,-i
代表&#34;就地&#34;和{{ 1}}让你指定一个表达式来应用于所有输入行。
另请注意(如果您对此已不太熟悉),您可以使用除-e
之外的其他字符(常见字符为#
,逗号等)与您的搜索冲突&amp;替换字符串。
有一个小警告:perl会读取&amp;编写命令行上给出的所有文件,即使是那些没有改变的文件。因此,文件&#39; 修改时间即使没有更改也会更新。 (我通常使用更多的shell魔法解决这个问题,例如使用%
或grep -l
来选择要处理的perl文件。)
编辑:如果我正确理解您的评论,您还需要有关正则表达式的帮助才能应用。让我简单地建议一下这样的事情:
grin -l
答案 1 :(得分:1)
相关:bash XHTML parsing using xpath
您可以使用SED:
SED 's/\(<test name=\"NAME\"\) value=\"VALUE\"/\1 value=\"YourValue\"/' test.xml
其中test.xml是包含给定节点的xml文档。这非常脆弱,如果您需要多次进行此替换,您可以努力使其更加灵活。例如,当前语句区分大小写,因此它不会替换名称为“name”的节点上的值,但您可以在语句末尾添加不区分大小写的标志,如下所示:
('s/\(<test name=\"NAME\"\) value=\"VALUE\"/\1 value=\"YourValue\"/I')
。
另一种选择是使用XSLT,但需要您下载外部库。它非常通用,可以成为对XML文档进行更复杂修改的可行选择。