Есть ли у вас egrep псевдоним для всего, что может изменить текст, как grep --color
может сделать?$ type egrep
Также проверьте вывод на наличие «скрытых» управляющих символов, используя od -bc
(как упоминалось выше) или hd -C
.
Я пытаюсь получить вывод ngrep. К сожалению, когда я добавляю еще один grep в конвейер, я вообще ничего не получаю. Это может быть и другая команда - cat / grep / tee - все разрывает цепочку. Пример:
# 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 псевдоним для всего, что может изменить текст, как grep --color
может сделать?$ type egrep
Также проверьте вывод на наличие «скрытых» управляющих символов, используя od -bc
(как упоминалось выше) или hd -C
.
РЕДАКТИРОВАТЬ: Я просто столкнулся с этим с 'egrep' - делал:
tail -f somefile|egrep 'somepattern'
Который обеспечил бы удовлетворяющий вывод каждые две секунды; но следующее ничего не дало :
tail -f somefile|egrep 'somepattern'|tr -d '%'
После некоторого поиска в справочной странице я нашел опцию --line-buffered, которая снова выдала вывод!
Затем я нашел это описание буферизации в конвейерах - похоже, все сводится к тому, что некоторые утилиты командной строки (например, tail -f) обычно вызывают fflush на stdout, а другие (cut, grep и т. Д.) Этого не делают.
Мой неправильный первый ответ ниже
Обычно, когда я сталкиваюсь с этими типами проблем, одна или несколько программ в конвейере помещают выходные данные в несколько файловых дескрипторов - чаще всего STDERR.
Вы можете попробовать добавить '2> & 1' перед первым '|' в конвейере, чтобы перенаправить STDERR в STDOUT.