如何修改awk脚本以替换XML中<connection>标签的属性值?
修改awk脚本实现XML指定属性替换
需求概述
原awk脚本会完全替换<named-connections>标签内的所有内容,现在需要调整为仅替换<connection>标签中的port、server、service、username这几个属性的值,将它们统一改为new_value,其他内容保持不变。
修改后的awk脚本
保存为xmlcode.awk:
# 标记是否处于<named-connections>标签范围内 /<named-connections>/ { inNamed = 1; print; next } /<\/named-connections>/ { inNamed = 0; print; next } # 在范围内处理<connection>标签行 inNamed && /<connection/ { # 逐个替换目标属性值 gsub(/port='[^']*'/, "port='new_value'") gsub(/server='[^']*'/, "server='new_value'") gsub(/service='[^']*'/, "service='new_value'") gsub(/username='[^']*'/, "username='new_value'") print next } # 其他行直接输出 { print }
脚本逻辑说明
- 通过
<named-connections>和</named-connections>标签标记处理范围,避免修改其他区域的内容。 - 在范围内部,定位到包含
<connection>的行,用gsub正则匹配目标属性:port='[^']*'匹配port属性及其原有单引号包裹的任意值- 替换为
port='new_value',同理处理另外三个属性
- 非目标行直接原样输出,保证XML结构和其他内容不受影响。
批处理命令调整
原批处理中不再需要传入%_configPRD%参数(因为不再替换整个标签内容),修改后命令如下:
for /f "usebackq delims=" %%f in (trim0ext.txt) do ( set "file5=%%f" awk -f xmlcode.awk "!file5!.txt" > "!file5!.tds" )
内容的提问来源于stack exchange,提问作者Bruno Pereira
相关产品推荐
相关产品推荐

