web-dev-qa-db-fra.com

Sortie sur stdout et en même temps grep dans un fichier

J'ai un script qui génère du texte sur stdout. Je veux voir toute cette sortie dans mon terminal et, en même temps, je veux filtrer certaines lignes et les enregistrer dans un fichier. Exemple:

$ myscript
Line A
Line B
Line C

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

$ cat out.file
Line A
Line C

Je souhaite voir la sortie de la première commande en terminal et enregistrer la sortie de la deuxième commande dans un fichier. À la fois. J'ai essayé d'utiliser tee, mais sans résultat, ou mieux, avec résultat inversé .

19
lorenzo-s

Je souhaite voir la sortie de la première commande en terminal et enregistrer la sortie de la deuxième commande dans un fichier.

Tant que vous ne vous souciez pas de savoir si ce que vous regardez est de -stdout ou stardr, vous pouvez toujours utiliser tee:

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

Travaillera sur Linux; Je ne sais pas si "/ dev/stardr" est également applicable sur les autres * Nixes.

29
goldilocks
{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1

Ou avec substitution de processus (ksh93, zsh ou bash):

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

Avec ZSH:

... >&1 > >(grep -e A -e C > out.file)
9

Voici une autre façon avec sed:

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

Par défaut, sed imprime toutes les lignes de sorte que dans ce cas stdout sera la même que STDIN (c'est-à-dire que vous verrez toute la sortie de myscript à l'écran).
[.____] En outre, toutes les lignes correspondant à PATTERN seront wRitten à out.file

4
don_crissti