2010-08-06 113 views
4

我有一个看起来像这样的数据:删除部分

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' 

做什么是正确的方法(单行)?

+1

我不知道为什么,这并不工作,但如果你将其替换'\ D''[0-9]'它工作正常。 – jtbandes 2010-08-06 05:08:53

+4

在GNU'sed'中,'\ d'在0-255范围内引入一到三位数字的十进制字符代码。例如,要删除一个选项卡,您可以这样做:'sed's/\ d9 //''(或'09'或'009')或用空格替换一些不可打印的字符:'sed's/[\ d1- \ d31]// g'' – 2010-08-06 06:07:00

回答

6

您需要为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 
+5

ITYM'perl -pe's/_ \ d + // g'' :) – hobbs 2010-08-06 07:28:23