替换 XML 中的值
Replace a value in XML
我有一个如下所示的 xml 标签:
<Setting Name="Check" Type="xsd:integer">53</Setting>
我只需要用最好的代码获取 53。有人可以建议吗?
我知道可以实现如下:
grep "Setting Name=\"Check\"" abc-test.xml | cut -d'>' -f 2 | cut -d'<' -f 1
谢谢
对于这种任务,我总是建议使用 xml
解析器,例如 xmlstarlet 并使用 xpath
表达式。一个例子:
xmlstarlet sel -t -v '/Setting[@Name="Check"]/text()' abc-test.xml
产生:
53
更新 xmllint 版本:
xmllint --xpath '/Setting[@Name="Check"]/text()' abc-test.xml
只有 grep
命令
grep -oP '(?<=>).*?(?=</Setting>)' input.xml
对于扩展条件(即:检查)你也可以像这样提到元素,
grep "Name=\"Check\"" input.xml|grep -oP '(?<=>).*?(?=</Setting>)'
输出将是,
53
这是我试过的,
可能的代码如下..不知道这个"best"是否适合你
使用 sed
sed '/Setting Name="Check"/{s/^[^>]\+>\([0-9]\+\)<.*//g}'
例子
echo '<Setting Name="Check" Type="xsd:integer">53</Setting>'|sed '/Setting Name="Check"/{s/^[^>]\+>\([0-9]\+\)<.*//g}'
使用 awk
awk -v FS="<[^0-9]+>" '[=12=]~"Setting Name=\"Check\""{print }'
例子
echo '<Setting Name="Check" Type="xsd:integer">53</Setting>'|awk -v FS="<[^0-9]+>" '[=13=]~"Setting Name=\"Check\""{print }'
我有一个如下所示的 xml 标签:
<Setting Name="Check" Type="xsd:integer">53</Setting>
我只需要用最好的代码获取 53。有人可以建议吗?
我知道可以实现如下:
grep "Setting Name=\"Check\"" abc-test.xml | cut -d'>' -f 2 | cut -d'<' -f 1
谢谢
对于这种任务,我总是建议使用 xml
解析器,例如 xmlstarlet 并使用 xpath
表达式。一个例子:
xmlstarlet sel -t -v '/Setting[@Name="Check"]/text()' abc-test.xml
产生:
53
更新 xmllint 版本:
xmllint --xpath '/Setting[@Name="Check"]/text()' abc-test.xml
只有 grep
命令
grep -oP '(?<=>).*?(?=</Setting>)' input.xml
对于扩展条件(即:检查)你也可以像这样提到元素,
grep "Name=\"Check\"" input.xml|grep -oP '(?<=>).*?(?=</Setting>)'
输出将是,
53
这是我试过的,
可能的代码如下..不知道这个"best"是否适合你
使用 sed
sed '/Setting Name="Check"/{s/^[^>]\+>\([0-9]\+\)<.*//g}'
例子
echo '<Setting Name="Check" Type="xsd:integer">53</Setting>'|sed '/Setting Name="Check"/{s/^[^>]\+>\([0-9]\+\)<.*//g}'
使用 awk
awk -v FS="<[^0-9]+>" '[=12=]~"Setting Name=\"Check\""{print }'
例子
echo '<Setting Name="Check" Type="xsd:integer">53</Setting>'|awk -v FS="<[^0-9]+>" '[=13=]~"Setting Name=\"Check\""{print }'