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

如何在sed脚本中使用sed删除括号内容,仅保留含下划线的括号内容

需求实现方案

你需要的是删除所有内部不含下划线的括号及内容,保留内部带下划线的括号,以下是两种可直接在sed脚本中使用的实现方案:

方案1:全平台POSIX兼容方案(无需额外参数,通用性最高)

直接在你的sed脚本中写入以下两行规则即可:

# 删除所有内部不含下划线的括号及前置空格
s/ *([^)_]*)//g
# 清理替换后产生的连续多余逗号
s/, *,/,/g

该写法适配所有标准sed实现,不需要额外加扩展正则参数,放入脚本可直接运行,针对你的示例输入处理后完全符合预期输出。

方案2:GNU sed 专属精简方案(无需二次清理)

如果你的运行环境是Linux默认的GNU sed,执行sed脚本时加-P参数开启PCRE正则支持,仅需一行规则即可完成需求:

s/ *\([^)]*_[^)]*\)(*SKIP)(*F)| *\([^)]*\)//g

规则逻辑说明:

  • 前半段*\([^)]*_[^)]*\)(*SKIP)(*F)标记所有内部包含下划线的括号为跳过不处理
  • 后半段| *\([^)]*\)匹配剩余所有括号及前置空格,直接删除

你之前写法的问题说明

  1. 第一种s/[(][^)]*[)]//g匹配所有括号内容不区分内部是否有下划线,所以会误删需要保留的带下划线的括号条目,符合你遇到的现象。
  2. 第二种写法命令行生效、脚本失效是因为你命令行执行时大概率加了-r/-E参数开启了扩展正则,{1,}这种量词在sed默认基础正则规则下必须转义为\{1,\}才能识别,脚本未开扩展正则的情况下{1,}会被当成普通字符匹配,自然没有效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:15:06