2013-06-25 2 views
8

У меня есть файл следующего вида:Удалить до конца строки после матча, держать линии не соответствуют

interesting text-MIB blah blah blah 
VERY INTERESTING TEXT 
interesting text-MIB blah blah blah 

В каждой строке, содержащей «-MIB» строку, я хотел бы удалить текст после этой строки, до конца строки.

Следующая команда, кажется, работает как задумано:

sed -i -n -e 's/-MIB.*$/-MIB/p' ./myfile 

Моя проблема заключается в том, что он также удаляет строки, где мой шаблон не найден. Здесь строка «ОЧЕНЬ ИНТЕРЕСНЫЙ ТЕКСТ» будет удалена. Я не очень хорошо знаком с sed. Что я делаю не так? Является ли sed подходящим для такого вида лечения?

ответ

3

Я отредактировал sed. Попробуйте это,

sed -i.bak 's/-MIB.*$/-MIB/g' ./myfile 

Здесь

-i - будет делать изменения в исходном файле и принимает резервную копию исходного файла в расширением .bak

1

sed-n опция подавляет печать по умолчанию, который является позже включите, если вы положили p после вашего заявления sed.

В приведенном выше примере то, что вы говорите, sed - это подавление печати всех строк, а затем печать только тех строк, где замена выполнена успешно. В результате строка, в которой не производится замещение, никогда не печатается.

Вы должны удалить -n опции и p из вашей команды:

sed -ie 's/-MIB.*$/-MIB/' ./myfile 
+0

Спасибо за дополнительное объяснение. –