Excluindo linhas específicas de serem redirecionadas [closed]

0

Suponha que estou executando um script como este:

/a/b/c/script.sh >> abc.log

Isso significa que todo o conteúdo / execução do script será redirecionado para abc.log . Se eu quiser que uma linha em particular dentro do script não seja redirecionada para abc.log , então como faço isso?

    
por rameez malik 16.07.2015 / 15:06

4 respostas

3

/a/b/c/script.sh >> abc.log

Esse comando significa que qualquer saída que script.sh grava no fluxo de saída padrão ser anexado a abc.log

Se você deseja excluir uma linha ou várias linhas que correspondem a um padrão semelhante, use grep -v para fazer isso:

/a/b/c/script.sh | grep -v '<line-to-ignore>' >> abc.log

ou para corresponder a um padrão (por exemplo, todas as linhas que começam com a palavra gato):

/a/b/c/script.sh | grep -vE '^cat' >> abc.log

O sinalizador -v para grep significa inverter a correspondência, portanto, todas as linhas que corresponderem ao padrão fornecido serão filtradas.

    
por 16.07.2015 / 15:09
3

Você pode usar uma ferramenta como sed para alterar a saída de script.sh , incluindo "excluir" linhas do fluxo. Se você quiser excluir um número de linha por linha, você poderia fazer

/a/b/c/script.sh | sed -e '5d' >> abc.log

que neste exemplo removerá a quinta linha da saída. Substitua 5 por qualquer número de linha.

/a/b/c/script.sh | sed -e '/<regex>/d' >> abc.log

removerá qualquer linha que corresponda à regex da saída.

    
por 16.07.2015 / 15:11
1

Você não consegue selecionar linhas. Apenas streams inteiros ( stdin , stdout , stderr (mais geralmente, qualquer descritor de arquivo aberto, não apenas esses padrões) podem ser redirecionados.

Você pode simular o que você quer inserindo comandos que irão classificar as linhas de saída para você.

$ echo -e "hello\nworld"   |  #write hello and world; one per line
tee >(grep hello >1.log) |  #select line matching hello and write it to 1.log
grep -v hello > 2.log  #select lines NOT matching hello and write them to 2.log
    
por 16.07.2015 / 15:27
0

Se for uma linha / comando específico no script, você pode enviar sua saída para /dev/null dentro do script. O comando dentro do script será parecido com:

command > /dev/null

Isso resultará na saída perdida. Se você quiser que ele apareça no console, você pode enviá-lo para stderr as

command 2> 'tty' 1>&2
    
por 16.07.2015 / 15:15