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

如何移除变量中带指定前缀后缀的所有子串?求sed/awk解决方案

移除字符串中标签及其内容的sed/awk解决方案

问题场景

给定变量内容:

sentence="<Name>Mary</Name> has a little lamb it's fleece as white as snow and everywhere that <Name>Sharon</Name> went the lamb was sure to go. <Name>Lucy</Name>, <Name>Mary</Name> quite contrary how does your garden grow?"

需要移除所有以<Name>开头、</Name>结尾的内容(包括标签本身),最终得到:

sentence=" has a little lamb it's fleece as white as snow and everywhere that  went the lamb was sure to go. ,  quite contrary how does your garden grow?"

解决方案

1. sed 实现

用sed的全局替换功能,通过正则精准匹配单个<Name>标签块:

# 直接输出处理后的结果
echo "$sentence" | sed 's/<Name>[^<]*<\/Name>//g'

# 直接更新变量(bash环境)
sentence=$(echo "$sentence" | sed 's/<Name>[^<]*<\/Name>//g')

说明:

  • s/匹配规则/替换内容/g:g表示全局替换所有匹配项,而非只替换第一个
  • <Name>[^<]*<\/Name>:<Name>开头后,匹配任意非<的字符(避免跨标签匹配),直到</Name>结尾,确保只清除单个标签及其内部内容

2. awk 实现

利用awk的gsub函数做全局替换,逻辑和sed一致:

# 直接输出处理后的结果
echo "$sentence" | awk '{gsub(/<Name>[^<]*<\/Name>/, ""); print}'

# 直接更新变量(bash环境)
sentence=$(echo "$sentence" | awk '{gsub(/<Name>[^<]*<\/Name>/, ""); print}')

说明:

  • gsub(regex, replacement):默认对当前行做全局替换,把匹配到的标签块替换为空字符串,最后打印处理后的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:08:27