如何用单行sed命令在Shell脚本中为XML标签添加多值?
修复sed命令错误并实现XML标签值填充
错误原因分析
你之前的命令报错是因为:
- 用逗号分隔两个sed替换操作的方式完全错误,sed会将逗号识别为要读取的文件名,因此抛出
sed: can't read ,: No such file or directory; - 正则表达式存在拼写错误(
ak.scahma..name应为ak.schema.name),且替换字符串的标签闭合逻辑混乱,不符合XML语法和sed替换规则。
正确的单行sed命令示例
假设你的目标XML标签结构如下:
<property key="ak.schema.name"></property> <property key="bk.schema.password"></property>
要将Shell变量ak_pwd和bk_pwd的值分别填入对应标签,可使用以下两种单行命令:
方式1:分号分隔多命令
sed -Ei "s/(<property key=\"ak.schema.name\">)(<\/property>)/\1$ak_pwd\2/; s/(<property key=\"bk.schema.password\">)(<\/property>)/\1$bk_pwd\2/" test.xml
方式2:多-e选项指定命令
sed -Ei -e "s/(<property key=\"ak.schema.name\">)(<\/property>)/\1$ak_pwd\2/" -e "s/(<property key=\"bk.schema.password\">)(<\/property>)/\1$bk_pwd\2/" test.xml
关键注意事项
-E选项启用扩展正则表达式,减少不必要的转义符,让正则更易读;- 用括号捕获标签的起始和闭合部分,替换时保留原标签结构,仅插入变量值;
- 若
ak_pwd或bk_pwd包含特殊字符(如/、&、\),需先对变量值进行转义,否则会破坏sed命令结构,导致替换失败。
内容的提问来源于stack exchange,提问作者ram_smca
相关产品推荐
相关产品推荐

