
Eu executo um aplicativo e canalizo a saída para grep
. Isso funciona. No entanto, desejo mostrar a saída na tela e gravar no arquivo.
Então estou canalizando o grep
resultado para tee
:
./app | grep something | tee file.txt
No entanto, isso não mostra (ou escreve) resultados, mesmo quando há 100% de resultados (confirmei isso com duas instâncias em execução).
Como faço o grep na saída do aplicativo, gravo no arquivo e mostro na tela?
Responder1
O comando, como você escreveu, deve funcionar. Pode haver vários motivos para o funcionamento incorreto do comando.
- O aplicativo envia o texto de saída para outra saída diferente do padrão.
- A cadeia de caracteres para pesquisa com o comando grep foi inserida incorretamente.
Solução do caso #1
- Verifique manualmente se o aplicativo envia o texto desejado para a saída a ser pesquisada.
./app
- Redirecione o texto de saída para um arquivo
./app > file.txt
e verifique o conteúdo do arquivo:cat file.txt
- Se o arquivo não contiver o texto desejado, é provável que o aplicativo envie a saída para a saída de erro, em vez da saída padrão. Então tente redirecionar para um arquivo de uma maneira diferente
./app 2 > file.txt
e verifique o conteúdo do arquivo novamente:cat file.txt
- Se o conteúdo do arquivo estiver correto desta vez, a solução é fácil. Você só precisa redirecionar a saída de erro para a saída padrão.
./app 2>&1 | grep "something" | tee file.txt
Solução do caso #2
- Verifique cuidadosamente a sequência de caracteres que você está usando como padrão de pesquisa. Coloque-o entre aspas ou apóstrofos para excluir interpretações errôneas aleatórias de caracteres curinga, variáveis $variablename, expressões regulares, etc.
- Comece testando a pesquisa usando o grep para strings muito simples compostas apenas por letras ou números que não podem ser mal interpretadas.