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

如何使用sed替换制表符文件第二列中的数字下划线模式

解决sed删除第二列数字_前缀的问题

嘿,我来帮你搞定这个sed的问题!你遇到的麻烦主要是sed默认的正则规则和你习惯的Perl风格正则不兼容,加上没精准定位第二列内容,下面一步步给你解决:

为什么之前的命令失败?

你用的\d+是Perl/PCRE风格的正则语法,但sed默认用基础正则表达式(BRE),不支持这些写法:

  • \d:sed里没有这个代表数字的简写,得用[0-9]或者POSIX标准的[[:digit:]]
  • +:在BRE里+是普通字符,要表示“一个或多个”得转义成\+;要是想用不转义的+,得开启扩展正则模式
  • 另外你的命令没限定只替换第二列内容,这次第一列结构不会被误匹配,但精准匹配总归更稳妥

正确的sed命令

方法1:使用基础正则表达式(BRE)

适配sed默认规则,精准匹配制表符后的数字_前缀:

sed 's/\t[0-9]\+_/\t/' infile

解释:

  • \t:匹配两列之间的制表符,确保只处理第二列的开头部分
  • [0-9]\+:匹配一个或多个数字(\+是BRE里的“一个或多个”量词)
  • _:匹配下划线
  • 替换成\t,相当于把第二列开头的数字_直接去掉,保留后面的内容

方法2:使用扩展正则表达式(ERE)

加-E选项(GNU sed也支持-r,BSD sed用-E即可),语法更直观:

sed -E 's/\t[[:digit:]]+_/\t/' infile

解释:

  • -E:开启扩展正则模式,不用转义+
  • [[:digit:]]:POSIX标准的数字匹配,比[0-9]更通用(支持非阿拉伯数字场景,这里效果一致)

验证输出

运行上面的命令后,就能得到你想要的结果:

BB_12 AA BB_13 AB BB_14 AD BB_15 AC

如果你的文件分隔符是空格而非制表符,把\t换成空格就行,不过你明确说是制表符分隔,用\t会更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:22