2010-08-06 111 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