Les personnages ^[[37m
y ^[[0m
font partie de la Séquences d'échappement ANSI (codes CSI) . Voir aussi ces spécifications .
Utilisation de GNU sed
sed 's/\x1b\[[0-9;]*m//g'
-
\x1b
(ou \x1B
) est le s'échapper caractère spécial
( sed
ne supporte pas les alternatives \e
y \033
)
-
\[
est le deuxième caractère de la séquence d'échappement
-
[0-9;]*
est la regex de la ou des valeurs de couleur
-
m
est le dernier caractère de la séquence d'échappement
Sous macOS, la valeur par défaut sed
ne prend pas en charge les caractères spéciaux tels que \e
comme l'a souligné slm y steamer25 dans les commentaires. Utilisez plutôt gsed
que vous pouvez installer en utilisant brew install gnu-sed
.
Exemple avec la ligne de commande de l'OP : (OP signifie Original Poster)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Hale suggère de supprimer toutes les autres séquences d'échappement en utilisant [a-zA-Z]
au lieu de la lettre m
spécifique à la séquence d'échappement du mode graphique (couleur). Mais [a-zA-Z]
peut être trop large et pourrait enlever trop de choses. Micha Faleski y Miguel Mota proposer de supprimer uniquement certaines séquences d'échappement en utilisant [mGKH]
y [mGKF]
respectivement. Britton Kerin indique K
doit également être utilisé en plus de m
pour enlever les couleurs de gcc
erreur/alerte (n'oubliez pas de rediriger l'information vers la page d'accueil) gcc 2>&1 | sed...
).
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Graphics Rendition Mode (including Color)
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
Utilisation de perl
La version de sed
installé sur certains systèmes d'exploitation peut être limité (par exemple, macOS). La commande perl
a l'avantage d'être généralement plus facile à installer/mettre à jour sur un plus grand nombre de systèmes d'exploitation. Adam Katz suggère d'utiliser \e
(même chose que \x1b
) en PCRE .
Choisissez votre regex en fonction du nombre de commandes que vous souhaitez filtrer :
perl -pe 's/\e\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\e\[[0-9;]*[mG]//g'
perl -pe 's/\e\[[0-9;]*[mGKH]//g'
perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'
perl -pe 's/\e\[[0-9;]*m(?:\e\[K)?//g' # Adam Katz's trick
Exemple avec la ligne de commande de l'OP :
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
Utilisation
Comme l'a souligné Stuart Cardall Le commentaire de l'auteur, cette sed
La ligne de commande est utilisée par le projet Ultimate Nginx Bad Bot (1000 étoiles) pour nettoyer le rapport d'email ;-)