我有一个格式良好且缩进的 xml,类似于下面的 xml。我需要获取带有文本的单声道标签“http://yahoo.com”
<root>
<mono id="1">
<tag1>http://google.com</tag1>
</mono>
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono>
<mono id="3">
<tag1>http://mysite.com</tag1>
</mono>
<mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>
</root>
我正在尝试使用以下命令。
猫 -n 索引.xml | sed -n "/root/,/root>/p" | sed -n "/root/,/root>/p" |格列普“http://yahoo.com”
6 <tag1>http://yahoo.com</tag1>
12 <tag1>http://yahoo.com</tag1>
我需要这样的输出。但不知道如何获取包含我的搜索文本的单节点。
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono>
<mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>
答案1
使用XML小星:
$ xmlstarlet sel -t -c '//mono[tag1 = "http://yahoo.com"]' -nl file.xml
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono><mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>
XPath 的//mono[tag1 = "http://yahoo.com"]
意思是“任何具有称为其值为”mongo
的子节点的节点。意思是“给我一份……的副本”,最后在输出末尾插入换行符。tag1
http://yahoo.com
-c
-nl
您想要id
匹配节点的:
xmlstarlet sel -t -v '//mono[tag1 = "http://yahoo.com"]/@id' -nl file.xml