替换sed中特定列中的模式

替换sed中特定列中的模式,sed,command-line,Sed,Command Line,我有一个选项卡文件,有两列,如下所示 BB_12 100_AA BB_13 101_AB BB_14 102_AD BB_15 103_AC 我希望删除第二列中的数字(将数字替换为零)。为此,我尝试了以下几种方法,但没有成功 sed 's/\d+\_//g' infile sed 's/(\d+\_)//g' infile 但这些调整都不起作用。看起来它没有在第二列中搜索。如何修改这个?预期产量为 BB_12 AA BB_13 AB BB_14 AD BB_15 AC

我有一个选项卡文件,有两列,如下所示

BB_12  100_AA
BB_13  101_AB 
BB_14  102_AD
BB_15  103_AC
我希望删除第二列中的数字(将数字替换为零)。为此,我尝试了以下几种方法,但没有成功

sed 's/\d+\_//g' infile
sed 's/(\d+\_)//g' infile
但这些调整都不起作用。看起来它没有在第二列中搜索。如何修改这个?预期产量为

BB_12  AA
BB_13  AB 
BB_14  AD
BB_15  AC

提前感谢。

以下简单的
sed
可能也会对您有所帮助

sed 's/\([^ ]*\) \([^_]*\)_\(.*\)/\1 \3/g'   Input_file
输出如下

BB_12 AA
BB_13 AB
BB_14 AD
BB_15 AC

您可以使用sed处理最后一列:

sed -E 's/[^ ]*_([^ ]*) *$/\1/' file
输出:

BB_12  AA
BB_13  AB
BB_14  AD
BB_15  AC

Awk
备选方案:

awk '{ sub(/^[^ ]+_/, "", $2) }1' OFS='\t' file

sed不支持
\d
。。对于与列相关的操作,考虑使用<代码> AWK ,这里不需要返回引用,并且极大地复杂化了表达式。只需将tab后跟数字和下划线替换为tab即可<代码>s/[0-9][0-9]*.//