Você tem egrep aliased para qualquer coisa que possa modificar o texto, como grep --color
poderia fazer? $ type egrep
Verifique também a saída de caracteres de controle "ocultos" usando od -bc
(como o jch mencionou) ou hd -C
.
Estou tentando aproveitar a saída do ngrep. Infelizmente quando adiciono outro grep ao pipeline, não recebo nenhuma saída. Pode ser algum outro comando também - cat / grep / tee - tudo quebra a cadeia. Exemplo:
# 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.
mas
#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
Se eu usar cat somefile
em vez de ngrep no começo, tudo funcionará como esperado.
Alguma idéia do que poderia dar errado aqui?
EDIT: Eu acabei de me deparar com isso com 'egrep' - estava fazendo:
tail -f somefile|egrep 'somepattern'
O que forneceria resultados gratificantes a cada dois segundos; mas o seguinte produziu nada :
tail -f somefile|egrep 'somepattern'|tr -d '%'
Após algumas pesquisas na página man, encontrei a opção '--line-buffered' que produziu a saída novamente!
Então eu encontrei esta descrição do buffer em pipelines - parece que o que se resume é que algum comando utilitários de linha (por exemplo: tail -f) rotineiramente chamam fflush em stdout e outros (cut, grep, etc) não.
Minha primeira resposta errada está abaixo
Normalmente, quando me deparo com esses tipos de problemas, um ou mais dos programas no pipeline estão colocando a saída em vários descritores de arquivos - na maioria das vezes STDERR.
Você pode tentar adicionar "2 > & 1" antes de seu primeiro "|" no pipeline para redirecionar STDERR para STDOUT.