替换 shell 脚本中的 XML 标签值

问题描述 投票:0回答:3

嗨,我是这样的 xml 文件。

  <parameter name="END_DATE">20181031</parameter>

我想将此标签值替换为我尝试过的其他值。

dt=$(awk -F '[<>]' '/_DATE/{print $3}' test.xml)

我提取了标签值。

我还有另一个像这样的变量值。

newdt=20181108

现在我需要将此值替换为提取的值。

如有任何帮助,我们将不胜感激。

bash shell awk sed grep
3个回答
1
投票

虽然 Chepner 是对的,

awk
sed
并不是 xml 的精确工具,但如果您的系统中没有
xmlstarlet
,请尝试以下操作。

echo $newdt
20181108
awk -v dat="$newdt" 'match($0,/>[0-9]+</){$0=substr($0,1,RSTART) dat substr($0,RSTART+RLENGTH-1)} 1' Input_file

0
投票

如果 sed 适合你 -

sed -Ei 's/( name="END_DATE")>20181031</\1>20181108</' test.xml

不过 xml 解析器可能是一个更好的主意。

如果需要嵌入变量-

sed -Ei "s/( name=\"END_DATE\")>20181031</\1>$newdt</" test.xml

0
投票

sed -Ei“s/(name=”END_DATE”)>20181031$newdt

© www.soinside.com 2019 - 2024. All rights reserved.