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

为何sed未执行指定正则表达式替换?技术求助

sed替换不生效的原因及解决办法

问题根源

sed默认使用基础正则表达式(BRE),你写的正则是扩展正则/PCRE风格的,导致sed无法识别匹配规则,所以替换没生效:

  • \d:sed的BRE不支持这个数字简写,必须用[0-9]或者[[:digit:]]来匹配数字
  • ()和{}:在BRE里这些是普通字符,要转义成\(、\)、\{、\}才能实现分组和重复次数匹配;或者给sed加-E选项启用扩展正则表达式(ERE),就不用转义这些符号了

修正后的可用命令

方式1:用基础正则(BRE),转义特殊字符

grep file.txt | sed 's/ id-\([0-9]\{5\}\)-\([0-9]\{5\}\)//g'

方式2:启用扩展正则(ERE),简化写法

grep file.txt | sed -E 's/ id-[0-9]{5}-[0-9]{5}//g'

(GNU sed也支持用-r替代-E,但-E是POSIX标准,兼容性更好)

更简化的写法:直接用sed处理文件

如果只是要移除目标内容,没必要先grep,直接让sed处理原文件即可:

sed -E 's/ id-[0-9]{5}-[0-9]{5}//g' file.txt

执行以上命令后,输出就会变成:

Nov-06-22 00:01:16
Nov-06-22 00:01:16

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:25:26