替换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]*.//