Le titre en dit long: j'aimerais obtenir ces colonnes aux couleurs vives de la sortie de quelque chose comme ls -al
, disons, comme dans la réponse de 10basetom à cette question .
8
Le titre en dit long: j'aimerais obtenir ces colonnes aux couleurs vives de la sortie de quelque chose comme ls -al
, disons, comme dans la réponse de 10basetom à cette question .
sed
ouawk
et insérer une séquence d'échappement ANSI .Réponses:
C'est faisable avec
awk
. Malheureusement, comme le format dels -l
n'est pas spécifié, il n'est pas possible de trouver une solution qui fonctionnera sur tous les systèmes, donc un ajustement de la couleur à utiliser pour quelle colonne sera nécessaire sur certains systèmes.Tout d'abord, nous voulons conserver les espaces d'origine utilisés par
ls -l
. Sinon, l'alignement des colonnes sera incorrect. Nous pouvons le faire avec l'FPAT
option, grâce à cette réponse SO :Dans
awk
chaque param position ($1
,$2
, etc.) se réfère à un champ, soit une colonne sur la ligne courante. L'FPAT
option ci-dessus a redéfini chaque champ pour inclure tous les espaces précédents, donc lorsque vousprint
le reculez, il conserve les espaces afin que les colonnes restent dans la même position.Maintenant, nous pouvons simplement modifier chaque champ pour insérer le code couleur , puis imprimer la sortie modifiée:
Notez que chaque colonne est réinitialisée par défaut (
0
entre[
etm
) par la suite. Si vous souhaitez que la couleur s'exécute sur plusieurs colonnes, vous pouvez omettre ce code. Personnellement, je préfère spécifier chaque colonne indépendamment.Vous pouvez définir une commande réutilisable dans votre
.bashrc
. Par exemple:Vous devrez peut-être redémarrer votre
bash
session (ou l'exécutersource ~/.bashrc
) pour que cette définition de fonction s'exécute.De là, vous pouvez simplement appeler
lsc
, ce qui devrait vous donner la sortie que vous désirez:la source
--color=always
. Tant que vous n'appliquez pas de couleurs différentes à la colonne du nom de fichier ($9
dans mon exemple), vous devezawk
les passer.--color=always
est une extension GNU donc si vous êtes sur un système non GNU (par exemple macOS, autres BSD), vous devrez soit installer la version GNU, soit utiliser une alternative .Cela imprimera la deuxième colonne
ls -alF
en rouge, la troisième à la huitième en bleu et la neuvième en noir:Il s'agit simplement d'un exemple. Vous pouvez personnaliser cela selon le contenu de votre cœur.
Pour ceux qui préfèrent leur code étalé sur plusieurs lignes:
Détails
tput
est un utilitaire pour générer une grande variété de codes de contrôle pour votre terminal. Par exemple,tput setaf n
définit la couleur de premier plann
oùn
peut varier de 0 à 7Vous pouvez en savoir plus sur
tput
ses capacités de couleur ici .Les variables code awk de Définit
black
,red
etblue
qui contiennent les codes de terminaux pour le noir, le rouge et le bleu, respectivement. Ces codes sont placés au début de la colonne que nous voulons colorer.Une astuce est que les codes de couleur ne se réinitialisent pas d'eux-mêmes. Ainsi, quelle que soit la dernière couleur que vous spécifiez sur une ligne, à moins qu'une autre commande de couleur ne soit spécifiée, sera la couleur par défaut pour la ligne suivante.
la source
awk
! Je suggère que vous incluiez également le motif pour préserver l'alignement des colonnes :)FPAT
astuce pour garder l'espacement correct.