2010-08-06 4 views
4

У меня есть данные, что выглядит следующим образом:Удаление части строки, содержащие цифры с SED/Perl

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

+4

В GNU 'sed',' \ d' вводится десятичный код символа от одной до трех цифр в диапазоне 0-255. Например, чтобы удалить вкладку, которую вы могли бы сделать: 'sed 's/\ d9 //'' (или '09' или' 009') или заменить некоторые непечатаемые символы пробелами: 'sed 's/[\ d1- \ d31]// g'' –

ответ

6

Вам нужен ключ -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

Смежные вопросы