You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:57:40