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

在Bash脚本中使用sed删除含特殊字符的字符串报错求助

解决方法

你的问题核心有两点:一是sed命令中特殊字符(如/)的转义麻烦,二是需要删除<test>标签内的所有子行以得到期望输出。

1. 简化特殊字符处理

sed默认用/作为替换分隔符,当目标字符串包含/时需转义,更简便的方式是更换分隔符(比如|或#),彻底避免转义操作:

sed -i 's|<host1>Sometext</host1>||g' test.xml

但这个命令仅清空<host1>所在行的内容,不会删除整行,也无法处理<host2>的行,无法满足你的最终需求。

2. 实现期望输出的完整命令

要将<test>和</test>之间的所有子行完全删除,保留标签间的空行,使用sed的区间匹配+条件删除:

sed -i '/<test>/,/<\/test>/ { /<test>/!{ /<\/test>/!d; }; }' test.xml

命令说明:

  • /<test>/,/<\/test>/:匹配从<test>行到</test>行的内容区间
  • /<test>/!{ /<\/test>/!d; }:仅保留<test>和</test>行,删除区间内的所有其他行

执行后,test.xml会生成你想要的输出:

<test>
</test>

内容的提问来源于stack exchange,提问作者Vinayak Shettigar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:15:34