Saída para stdout e ao mesmo tempo grep em um arquivo

16

Eu tenho um script que gera texto para stdout . Eu quero ver toda esta saída no meu terminal, e ao mesmo tempo eu quero filtrar algumas linhas e salvá-las em um arquivo. Exemplo:

$ myscript
Line A
Line B
Line C

$ myscript | grep -P 'A|C' > out.file

$ cat out.file
Line A
Line C

Eu quero ver a saída do primeiro comando no terminal e salvar a saída do segundo comando em um arquivo. Ao mesmo tempo. Eu tentei usar tee , mas sem resultado, ou melhor, com resultado invertido .

    
por lorenzo-s 06.04.2013 / 19:33

4 respostas

22

I want to see output of first command in terminal, and save the output of the second command in a file.

Contanto que você não se importe se o que você está vendo é de stdout ou stderr , você ainda pode usar tee :

myscript | tee /dev/stderr | grep -P 'A|C' > out.file

Trabalhará no linux; Eu não sei se "/ dev / stderr" é igualmente aplicável em outros * nixes.

    
por 06.04.2013 / 20:15
7
{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1

Ou com substituição de processo (ksh93, zsh ou bash):

... | tee >(grep -e A -e C > out.file)

Com zsh:

... >&1 > >(grep -e A -e C > out.file)
    
por 06.04.2013 / 21:45
3

Aqui está outra maneira com sed :

myscript | sed '/PATTERN/w out.file'

Por padrão, sed imprime todas as linhas, então, neste caso, stdout será o mesmo que stdin (ou seja, você verá toda a saída de myscript na tela).
Além disso, todas as linhas correspondentes a PATTERN serão w ritten para out.file

    
por 06.05.2016 / 23:03
-1

você não especificou como usou o comando tee, mas isso deve funcionar:

myscript | grep -P 'A|C' | tee out.file

pelo menos funcionou no meu servidor há poucos minutos ...

    
por 06.04.2013 / 20:16