我有一个带有一些空元素字段的xml文件,即
<elementA></elementA>
我正在编写一个bash脚本,用一个用户指定的值填充空字段并将其保存为新的xml文件。
awk "{gsub("<elementA></elementA>", "$XMLVALUE", $0); print $0)" $EMTPYFILE > $NEWFILE
#$EMPTYFILE is a bash variable containing file path of xml file containing emtpy fields
#$NEWFILE is a bash variable file path of new xml file with redirected output from awk
#$XMLVALUE is a bash variable containing the value to be inserted into the field.
输出应该是原始的xml文件,但填充了$ XMLVALUE的值。
但是我会遇到各种不同的错误,具体取决于我是使用单引号还是双引号。我认为问题是awk和bash有多个级别的解析,我正在混合正确处理bash变量vs awk变量和使用/。
答案 0 :(得分:3)
awk
是这项工作的错误工具。
Yellow & Blue
更改为Yellow &Amp; Blue
,或3<4
更改为3<4
)需要如此逃脱。相反,请使用XMLStarlet:
xmlstarlet ed -u '//elementA' -v "$value" <in.xml >out.xml
也就是说,为了安全地将shell变量的值传递给awk,请使用-v
:
# Don't actually use this for XML!
awk -v in_string="$in_string" -v out_string="$out_string" \
'{gsub(in_string, out_string); print}' \
"$in_file" > "$out_file"
但是,如果你想让awk处理文字,那么即使这样也不够好。请参阅BashFAQ #21中提供的gsub_literal
功能。