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

如何用sed仅替换括号内匹配的PATTERN而不修改外部相同内容

sed 实现括号内指定字符串替换方案

sed 完全可以实现你描述的需求,下面给出两种可直接使用的方案:


方法1:通用POSIX sed方案(兼容所有sed版本)

核心逻辑是通过标签循环,逐个定位括号内的PATTERN进行替换,直到括号内没有可替换的目标为止,适配所有操作系统的sed环境:

sed -e ':loop' -e 's/\(([^)]*\)PATTERN\([^)]*)\)/\1pattern\2/g' -e 't loop' sed.txt

命令说明:

  • :loop 定义一个名为loop的跳转标签
  • 替换规则通过分组捕获括号内PATTERN前后的内容,仅替换中间的PATTERN为目标字符串
  • t loop 表示如果上一次替换执行成功,就跳回loop标签重新扫描整行,直到没有符合规则的替换项为止,可处理单个括号内多个PATTERN的场景,不会影响括号外的内容

方法2:GNU sed 简化方案(Linux发行版默认sed适用)

如果你的环境是GNU sed,可通过扩展正则的零宽断言写出更简洁的命令:

sed -E 's/PATTERN(?=[^()]*\))/pattern/g' sed.txt

命令说明:

  • (?=[^()]*\)) 是正向预查规则,仅匹配「后面跟着非括号字符+右括号」的PATTERN,天然过滤掉括号外的所有PATTERN,单次扫描即可完成全部替换

验证结果

以上两种命令执行后,都会输出你期望的结果:

outer_string_PATTERN_string(pattern_And_pattern_pattern_i)PATTERN_outer_string(i_pattern_inner)_outer_string

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:39:00