Grepping grep производят сбои

Я пробую к grep вывод ngrep. К сожалению, когда я добавляю другой grep к конвейеру, я не получаю вывода вообще. Это может быть некоторая другая команда также - кошка / grep / мишень - все повреждает цепочку. Пример:

# this works:
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180'
--
U +1.469535 xxx:5060 -> xxx:5060
SIP/2.0 180 Ringing.
--
U +0.001384 xxx:5060 -> xxx:2048
SIP/2.0 180 Ringing.

но

#these don't:
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180' | egrep '^U'
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180' | cat
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180' | tee test

Если я использую cat somefile вместо ngrep в запуске все работает как ожидалось. Какие-либо идеи, что могло пойти не так, как надо здесь?

0
задан 05.02.2010, 19:46

2 ответа

Вы получили egrep, искаженный к чему-нибудь, как что мог бы изменить текст, grep --color мог бы сделать? $ type egrep

Также проверьте вывод на "скрытое" использование управляющих символов od -bc (как jch упомянутый) или hd -C.

2
ответ дан 24.11.2019, 06:57

Править: Я просто столкнулся, это сам с 'egrep' - делало:

tail -f somefile|egrep 'somepattern'

Который обеспечивал бы вывод удовлетворения каждые две секунды; но следующее ничего не произвело:

tail -f somefile|egrep 'somepattern'|tr -d '%'

После некоторого закапывания страницы справочника я нашел '-' опция с буфером строки, которая произвела вывод снова!

Затем я нашел это описание буферизации в конвейерах - похоже на то, к чему это сводится, то, что некоторая командная строка utils (например: хвост-f), обычно называют сброс на stdout, и другие (сокращение, grep, и т.д.) не делают.

Мой неправильный первый ответ ниже


Обычно, когда я сталкиваюсь с этими типами проблем, один или несколько программ в конвейере помещает вывод на несколько дескрипторов файлов - чаще всего STDERR.

Вы могли бы попытаться добавить '2> &1' перед Вашим первым '|' в конвейере для перенаправления STDERR к STDOUT.

0
ответ дан 24.11.2019, 06:57

Теги

Похожие вопросы