Я пробую к 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 в запуске все работает как ожидалось. Какие-либо идеи, что могло пойти не так, как надо здесь?
Править: Я просто столкнулся, это сам с 'egrep' - делало:
tail -f somefile|egrep 'somepattern'
Который обеспечивал бы вывод удовлетворения каждые две секунды; но следующее ничего не произвело:
tail -f somefile|egrep 'somepattern'|tr -d '%'
После некоторого закапывания страницы справочника я нашел '-' опция с буфером строки, которая произвела вывод снова!
Затем я нашел это описание буферизации в конвейерах - похоже на то, к чему это сводится, то, что некоторая командная строка utils (например: хвост-f), обычно называют сброс на stdout, и другие (сокращение, grep, и т.д.) не делают.
Мой неправильный первый ответ ниже
Обычно, когда я сталкиваюсь с этими типами проблем, один или несколько программ в конвейере помещает вывод на несколько дескрипторов файлов - чаще всего STDERR.
Вы могли бы попытаться добавить '2> &1' перед Вашим первым '|' в конвейере для перенаправления STDERR к STDOUT.