我有 xml 文件,其中包含标签<a>0000123</a>
, <a>1200000</a>
, <a>0001000</a>
。
我只需要获取该特定标签应在 100 到 1000 之间的值。
答案1
使用XML小星:
xml sel -t -v '//a[. > 100 and . < 1000]' -nl file.xml
a
这将返回 100 到 1000 之间的值列表。这些值将从中 XML 文档的节点值中获取file.xml
,无论它们出现在何处。零填充数字似乎处理得当。最后的at-nl
确保输出的最后一行末尾有换行符。
在某些系统上,XMLStarlet 安装为xmlstarlet
而不是仅安装为xml
.
例子:
$ cat file.xml
<?xml version="1.0"?>
<root>
<a>0000123</a>
<a>1200000</a>
<a>0001000</a>
</root>
$ xml sel -t -v '//a[. > 100 and . < 1000]' -nl file.xml
0000123
答案2
和xmllint:
xmllint --xpath '//a[text() > 100 and text() < 1000]/text()' file.xml
如果你想用换行符分隔:
xmllint --shell file.xml <<< 'xpath //a[text() > 100 and text() < 000]/text()' |
grep -oP 'content=\K.*'
xmllint
AFAIK,这是在没有开关的情况下使用的限制--shell