Linux 使用SED/Perl删除包含数字的字符串部分

Linux 使用SED/Perl删除包含数字的字符串部分,linux,perl,bash,unix,sed,Linux,Perl,Bash,Unix,Sed,我的数据如下所示: AB208804_1 446 576 AB208804_1orf 0 AB208804_20 446 576 AB208804_20orf 0 我想将它们转换为: AB208804 446 576 AB208804orf 0 AB208804 446 576 AB208804orf 0 只需删除第1列和第4列中的数字部分 为什么这条线不起作用: sed 's/_\d+//g' 正确的方法是什么(一行)?试试: sed 's/_[0-9]\+//g' sed需要-r开

我的数据如下所示:

AB208804_1 446 576 AB208804_1orf 0
AB208804_20 446 576 AB208804_20orf 0
我想将它们转换为:

AB208804 446 576 AB208804orf 0
AB208804 446 576 AB208804orf 0
只需删除第1列和第4列中的数字部分

为什么这条线不起作用:

sed 's/_\d+//g'
正确的方法是什么(一行)?

试试:

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

sed需要-r开关和字符类

$ echo "AB208804_1 446 576 AB208804_1orf 0" | sed -r 's/_[0-9]+//g'
AB208804 446 576 AB208804orf 0
或者,既然你问了;在perl中:

$ echo "AB208804_1 446 576 AB208804_1orf 0" | perl -ne 's/_\d+//g; print $_'
AB208804 446 576 AB208804orf 0

我不知道为什么这不起作用,但是如果你用
[0-9]
替换
\d
,它工作得很好。在GNU
sed
中,
\d
引入了一个十进制字符代码,在0-255范围内为一到三位。例如,要删除选项卡,可以执行以下操作:
sed's/\d9/'
(或
09
009
)或用空格替换一些无法打印的字符:
sed's/[\d1-\d31]//g'
ITYM
perl-pe's/\ud+//g'
 sed 's/_[0-9][0-9]*//g' file