替换 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 解析器,例如 并使用 xpath 表达式。一个例子:

xmlstarlet sel -t -v '/Setting[@Name="Check"]/text()' abc-test.xml

产生:

53

更新 版本:

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 }'