我有一个 xml 文件
其中需要搜索的行是:
SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
这个搜索到的值需要替换为以下变量中的值,或者也可以存储在另一个文件中:
REPLACE='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>
'
如何使用 SED 或 AWK 等 unix 命令来完成此操作?(这里需要将 SEARCH 替换为 REPLACE。
答案1
是的,可以使用 sed 来完成,但我同意 Jens 的观点。我建议使用适当的工具(如 python + lxml 库)来搜索和替换标签。
答案2
据我所知,需要转义的字符是:
awk '/<\?xml version="1.0" encoding="UTF-8" standalone="no"\?><SSC>/ {print "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>"}' <<< '<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
- 在搜索字段中:您想用 \? 来转义 ? 字符
- 在 REPLACE 字段中:你想用 \ 来转义“字符
或者如果您需要使用变量,也可以在搜索字段中转义“并转义字符两次,一次存储在变量中,两次回显!
SEARCH_escaped=`sed -e 's/\?/\\\?/g' -e 's/\"/\\\"/g' <<< $SEARCH`
REPLACE_escaped=`sed 's/\"/\\\"/g' <<< $REPLACE`
awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH