awk或sed删除字段中最后一位数字后的文本

awk或sed删除字段中最后一位数字后的文本,awk,sed,Awk,Sed,在下面以制表符分隔的文件中,我试图删除$1中最后一位数字之后的文本。我尝试了两个命令,结果很接近,但没有达到预期的输出。我不知道我是否使用了最好的方法。谢谢 文件 期望输出 塞德 可以使用求反字符类和锚定仅在字符串末尾删除 $ awk 'BEGIN{FS=OFS="\t"} {sub(/[^0-9]+$/, "", $1)} 1' ip.txt chr7:55249071 EGFR chr7:55242469_55242477 EGFR 开始{FS=OFS=\t}以将输入和输出字段分隔符

在下面以制表符分隔的文件中,我试图删除$1中最后一位数字之后的文本。我尝试了两个命令,结果很接近,但没有达到预期的输出。我不知道我是否使用了最好的方法。谢谢

文件

期望输出

塞德


可以使用求反字符类和锚定仅在字符串末尾删除

$ awk 'BEGIN{FS=OFS="\t"} {sub(/[^0-9]+$/, "", $1)} 1' ip.txt
chr7:55249071   EGFR
chr7:55242469_55242477  EGFR
开始{FS=OFS=\t}以将输入和输出字段分隔符设置为制表符 sub/[^0-9]+$/,$1仅对第一个字段执行替换,与sed相比,这使它更容易适应不同的字段 1种打印$0内容的惯用方法
可以使用求反字符类和锚定仅在字符串末尾删除

$ awk 'BEGIN{FS=OFS="\t"} {sub(/[^0-9]+$/, "", $1)} 1' ip.txt
chr7:55249071   EGFR
chr7:55242469_55242477  EGFR
开始{FS=OFS=\t}以将输入和输出字段分隔符设置为制表符 sub/[^0-9]+$/,$1仅对第一个字段执行替换,与sed相比,这使它更容易适应不同的字段 1种打印$0内容的惯用方法
如果保证您的输入只有两个以制表符分隔的字段,您可以使用:

sed 's/[^0-9]\+\t/\t/' file

如果保证您的输入只有两个以制表符分隔的字段,您可以使用:

sed 's/[^0-9]\+\t/\t/' file

这可能适用于GNU sed:

sed 's/\(.*[0-9]\)\S\+/\1/' file

匹配到最后一个数字,并存储为反向引用,并删除其后面的任何非空格字符。

这可能适用于GNU-sed:

sed 's/\(.*[0-9]\)\S\+/\1/' file

匹配到最后一个数字,存储为反向引用,并删除其后的所有非空格字符。

谢谢大家:谢谢大家: