Comment conserver une sortie colorée à l'aide de sed


10

J'utilise la sedcommande et je souhaite conserver la sortie colorée de la commande précédente. La sortie de lsest colorée, mais la sortie de sed ne l'est pas. J'utilise OSX.

ls -la | sed -En  '/Desktop/q;p'

Réponses:


13

Sous macOS, le lsn'est pas GNU lset n'accepte pas l' --color=alwaysoption que les utilisateurs Linux peuvent attendre pour cette fonctionnalité.

Dans la version macOS de ls, les couleurs sont contrôlées par deux variables : $CLICOLORet $CLICOLOR_FORCE. Si le premier est défini, le terminal spécifié par $TERMprend en charge la couleur et la sortie est vers un terminal, alors cette sortie sera colorée, tout comme l' --color=autooption de GNU . Si cette dernière variable est également définie, la condition finale est supprimée, se comportant comme les GNU --color=always.

Donc, pour que la couleur passe à travers sed, vous auriez besoin de quelque chose comme ceci:

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'

macOS a lségalement la -Gpossibilité d'activer la couleur, mais je ne sais pas comment elle se comporte dans un pipeline.
8bittree

2
@ 8bittree Passing -Géquivaut à définir $CLICOLOR(et donc pas suffisant)
Fox

6

Je devine aveuglément que votre distribution, comme beaucoup, a un alias qui correspond lsà ls --color=auto. ls -la --color=always | sed …devrait marcher.

(Le autoparamètre permet, d'une manière générale, de lsvérifier si sa sortie est affichée ou non, et uniquement la couleur de l'affichage. La raison en est que la couleur est réalisée par des séquences d'échappement, c'est-à-dire des caractères de commande invisibles, donc un programme peut les confondre pour une partie du nom de fichier, des choses comme ça.)


3
La conjecture aveugle est fausse. OSX n'est pas une distribution Linux et n'utilise pas d'espace utilisateur GNU
Fox
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.