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'
Johniak
la source

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'
Renard
la source
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.)

Ulrich Schwarz
la source
3
La conjecture aveugle est fausse. OSX n'est pas une distribution Linux et n'utilise pas d'espace utilisateur GNU
Fox