web-dev-qa-db-fra.com

Conserver la coloration après la passe de grep à grep

Il y a une question similaire dans Conserver la coloration ls après la grep’ing mais cela me dérange que si vous canalisez la sortie grep colorée dans une autre grep, la coloration n'est pas conservée.

Par exemple grep --color Word * | grep -v AVOID ne conserve pas la couleur de la première sortie. Mais pour moi ls | grep FILE gardez la couleur, pourquoi la différence?

129
Zitrax

grep désactive parfois la sortie couleur, par exemple lors de l'écriture dans un tube. Vous pouvez remplacer ce comportement avec grep --color=always

La ligne de commande correcte serait

grep --color=always Word * | grep -v AVOID

C'est assez verbeux, sinon vous pouvez simplement ajouter la ligne

alias cgrep="grep --color=always"

à ton .bashrc par exemple et utilisez cgrep comme grep coloré. Lors de la redéfinition de grep, vous pourriez rencontrer des problèmes avec les scripts qui reposent sur une sortie spécifique de grep et n'aiment pas le code d'échappement ascii.

147
Otto Allmendinger

Un mot de conseil:

Lors de l'utilisation de grep --color=always, les chaînes réelles transmises au canal suivant seront modifiées. Cela peut conduire à la situation suivante:

$ grep --color=always -e '1' * | grep -ve '12'
11
12
13

Même si l'option -ve '12' devrait exclure la ligne médiane, ce ne sera pas le cas car il y a des caractères de couleur entre 1 et 2.

72
andersonvom

Répétez simplement la même commande grep à la fin de votre pipe.
grep Word * | grep -v AVOID | grep -v AVOID2 | grep Word

8
Alex