J'utilise la sed
commande et je souhaite conserver la sortie colorée de la commande précédente. La sortie de ls
est colorée, mais la sortie de sed ne l'est pas. J'utilise OSX.
ls -la | sed -En '/Desktop/q;p'
Sous macOS, le ls
n'est pas GNU ls
et n'accepte pas l' --color=always
option que les utilisateurs Linux peuvent attendre pour cette fonctionnalité.
Dans la version macOS de ls
, les couleurs sont contrôlées par deux variables : $CLICOLOR
et $CLICOLOR_FORCE
. Si le premier est défini, le terminal spécifié par $TERM
prend en charge la couleur et la sortie est vers un terminal, alors cette sortie sera colorée, tout comme l' --color=auto
option 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'
ls
également la-G
possibilité d'activer la couleur, mais je ne sais pas comment elle se comporte dans un pipeline.-G
équivaut à définir$CLICOLOR
(et donc pas suffisant)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
auto
paramètre permet, d'une manière générale, dels
vé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.)la source