Grep和Sed等效于XML命令行处理
时间:2020-03-06 14:20:53 来源:igfitidea点击:
在执行Shell脚本时,通常数据将存储在单行记录的文件中,例如csv。用grep
和sed
处理这些数据真的很简单。但是我必须经常处理XML,因此我真的很想一种通过命令行编写对XML数据的脚本访问方式。什么是最好的工具?
解决方案
一些有前途的工具:
- nokogiri:使用XPath和CSS选择器在ruby中解析HTML / XML DOM
- hpricot:已弃用
- fxgrep:使用其自己的类似XPath的语法来查询文档。用SML编写,因此安装可能很困难。
- LT XML:源自SGML工具的XML工具包,包括sggrep,sgsort,xmlnorm等。使用其自己的查询语法。该文档是非常正式的。 LT用C编写。XML2声称支持XPath,XInclude和其他W3C标准。
- xmlgrep2:使用XPath进行简单而强大的搜索。使用XML :: LibXML和libxml2在Perl中编写。
- XQSharp:支持XQuery,它是XPath的扩展。为.NET Framework而编写。
- xml-coreutils:与GNU coreutils等效的Laird Breyer的工具包。在有关理想工具包应包含的内容的有趣文章中进行了讨论。
- xmldiff:用于比较两个xml文件的简单工具。
- xmltk:似乎没有在debian,ubuntu,fedora或者macports中包含软件包,自2007年以来没有发布过,并且使用了非便携式构建自动化。
xml-coreutils似乎是记录最好的文档,也是最面向UNIX的。
JEdit有一个名为" XQuery"的插件,该插件提供XML文档的查询功能。
命令行还不行,但是行得通!
确定要对XML文件执行的操作,并创建一个脚本(可能在Python中,可能是在Perl中),该脚本通过使用供Shell脚本使用的参数来公开该功能。
我发现xmlstarlet在这种事情上非常擅长。
http://xmlstar.sourceforge.net/
大多数发行版存储库中也应该可用。入门教程在这里:
http://www.ibm.com/developerworks/library/x-starlet.html
完全取决于我们要执行的操作。
XSLT可能是要走的路,但是有一个学习曲线。尝试使用xsltproc并注意我们可以输入参数。
XQuery可能是一个很好的解决方案。 (相对)易于学习,并且是W3C标准。
我建议将XQSharp用于命令行处理器。
在Joseph Holsten的出色列表中,我添加了Perl库XML :: XPath随附的xpath命令行脚本。从XML文件提取信息的好方法:
xpath -q -e '/entry[@xml:lang="fr"]' *xml
还有" xml2"和" 2xml"对。它将允许普通的字符串编辑工具来处理XML。
例子。 q.xml:
<?xml version="1.0"?> <foo> text more text <textnode>ddd</textnode><textnode a="bv">dsss</textnode> <![CDATA[ asfdasdsa <foo> sdfsdfdsf <bar> ]]> </foo>
xml2 <q.xml
/foo= /foo= text /foo= more text /foo= /foo/textnode=ddd /foo/textnode /foo/textnode/@a=bv /foo/textnode=dsss /foo= /foo= asfdasdsa <foo> sdfsdfdsf <bar> /foo=
xml2 <q.xml | grep textnode | sed's!/ foo!/ bar / baz!' | 2xml
<bar><baz><textnode>ddd</textnode><textnode a="bv">dsss</textnode></baz></bar>
P.S.还有html2
/2html
。