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 .
sedou awket insérer une séquence d'échappement ANSI .
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 .
sedou awket insérer une séquence d'échappement ANSI .
Réponses:
C'est faisable avec awk. Malheureusement, comme le format de ls -ln'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' FPAToption, grâce à cette réponse SO :
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
Dans awkchaque param position ( $1, $2, etc.) se réfère à un champ, soit une colonne sur la ligne courante. L' FPAToption ci-dessus a redéfini chaque champ pour inclure tous les espaces précédents, donc lorsque vous printle 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:
{
$2 = "\033[31m" $2 "\033[0m";
$3 = "\033[36m" $3 "\033[0m";
$4 = "\033[36m" $4 "\033[0m";
$5 = "\033[31m" $5 "\033[0m";
$6 = "\033[36m" $6 "\033[0m";
$7 = "\033[36m" $7 "\033[0m";
$8 = "\033[31m" $8 "\033[0m";
print
}
'
Notez que chaque colonne est réinitialisée par défaut ( 0entre [et m) 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:
lsc() {
ls -la | awk '
BEGIN {
FPAT = "([[:space:]]*[^[:space:]]+)";
OFS = "";
}
{
$2 = "\033[31m" $2 "\033[0m";
$3 = "\033[36m" $3 "\033[0m";
$4 = "\033[36m" $4 "\033[0m";
$5 = "\033[31m" $5 "\033[0m";
$6 = "\033[36m" $6 "\033[0m";
$7 = "\033[36m" $7 "\033[0m";
$8 = "\033[31m" $8 "\033[0m";
print
}
'
}
Vous devrez peut-être redémarrer votre bashsession (ou l'exécuter source ~/.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:
--color=always. Tant que vous n'appliquez pas de couleurs différentes à la colonne du nom de fichier ( $9dans mon exemple), vous devez awkles passer.
--color=alwaysest 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 -alFen rouge, la troisième à la huitième en bleu et la neuvième en noir:
ls -alF | awk -v black=$(tput setaf 0) -v red=$(tput setaf 1) -v blue=$(tput setaf 4) '{$2=red $2; $3= blue $3; $9=black $9} 1'
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:
ls -alF | awk -v black=$(tput setaf 0) \
-v red=$(tput setaf 1) \
-v blue=$(tput setaf 4) \
'{
$2=red $2
$3= blue $3
$9=black $9
}
1'
tputest un utilitaire pour générer une grande variété de codes de contrôle pour votre terminal. Par exemple, tput setaf ndéfinit la couleur de premier plan noù npeut varier de 0 à 7
0 – Black
1 – Red
2 – Green
3 – Yellow
4 – Blue
5 – Magenta
6 – Cyan
7 – White
Vous pouvez en savoir plus sur tputses capacités de couleur ici .
Les variables code awk de Définit black, redet bluequi 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.
awk! Je suggère que vous incluiez également le motif pour préserver l'alignement des colonnes :)
FPATastuce pour garder l'espacement correct.