2016-11-04 2 views
0

Я использую Ubuntu запустить тест автоматизации, то нужно обработать файл журнала текста, например, следующиеКак удалить строки, содержащие определенную строку, используя Shell?

INVITE INVITE sip:[email protected]:5060 SIP/2.0 
INVITE SIP/2.0 100 Trying 
1154845 NOTIFY NOTIFY sip:[email protected]:5065 SIP/2.0 
1154845 NOTIFY NOTIFY SIP/2.0 200 OK 
INVITE SIP/2.0 180 Ringing 

Я хочу просто удалить 2 строки с «NOTIFY» и получить лог-файл ниже, я 'm new для Shell и попробовал некоторые google, но не понял, как вы можете поделиться, как это сделать? Благодаря!

INVITE INVITE sip:[email protected]:5060 SIP/2.0 
INVITE SIP/2.0 100 Trying 
INVITE SIP/2.0 180 Ringing 
+1

'Grep "^ INVITE"< log.txt' дает вам все строки, начинающиеся с 'INVITE'. – Ahmad

ответ

3

Попробуйте следующее:

grep -v "NOTIFY" filename.txt 

Grep обычно используется для печати строк, которые соответствуют определенному шаблону, но опция «-v» позволяет инвертировать матч; удаление линий, соответствующих шаблону.

Более подробную информацию можно найти here.

+0

Это был бы мой любимый способ. +1 – zedfoxus

1

awk путь:

awk '!/NOTIFY/ {print $0}' filename 

Объяснение

awk намерен напечатать строку, представленную $0, если строка содержит УВЕДОМИТЬ, как указано /NOTIFY/. Поскольку мы не хотим включать строки, содержащие УВЕДОМИТЬ, мы помещаем ! перед матчем, как так: !/NOTIFY/

-

sed попытка:

sed -n '/NOTIFY/!p' filename 
Смежные вопросы