Comment conserver la couleur de grep lors du stockage de variables ou de canalisations dans une autre commande?

Je souhaite utiliser le grep dans un script bash pour rechercher des lignes correspondantes dans un fichier, mettre en évidence les correspondances avec la couleur, puis imprimer les résultats dans une table à l’aide de la commande column . Quelque chose comme ça:

 data=`cat file.data | egrep -i --color "$search"` echo $'\n'"col1"$'\t'"col2"$'\t'"col3"$'\t'"col4"$'\n'"$data" | column -t -s$'\t' 

Le code ci-dessus fait tout comme vous le souhaitez, sauf que la couleur est perdue.


Voici un exemple simplifié:

entrer la description de l'image ici

Comme vous pouvez le voir, lorsque j’ai utilisé grep les résultats ont été imprimés sur des lignes et des couleurs individuelles, mais lorsque j’enregistre les résultats dans une variable, puis que la variable est imprimée, les sauts de ligne et les couleurs disparaissent.


Est-il possible de faire ce que je demande?

Utilisez l’option --color=always :

 data=$(egrep -i --color=always "$search" file.data) 

Par défaut, grep ne produit pas de couleur à moins que la sortie ne soit directement dirigée vers un terminal. C’est normalement une bonne chose. L’option --color=always remplace --color=always cela.

Pour les occasions où vous ne voulez pas de couleur, utilisez --color=never .