Ho scritto un piccolo script che colorerà qualunque stringa tu gli dia:
#! / usr / bin / env perluse Getopt :: Std; usa rigoroso; usa Term :: ANSIColor; my% opts; getopts ('hic: l:', \% opts); if ($ opts {h}) {print<<EoF; Usa -l per specificare i pattern da evidenziare. Per specificare più di un modello utilizzare le virgole. -l: un'espressione regolare Perl da colorare. Più espressioni possono essere passate come valori separati da virgole: -l pippo, bar, baz-i: fa distinzione tra maiuscole e minuscole-c: elenco di colori separato da virgole; EoF exit (0); } my $ case_sensitive = $ opts {i} || undef; my @color = ('bold red', 'bold blue', 'bold yellow', 'bold green', 'bold magenta', 'bold cyan', ' yellow on_magenta ',' bright_white on_red ',' bright_yellow on_red ',' white on_black '); if ($ opts {c}) {@ color = split (/, /, $ opts {c});} my @patterns; if ($ opts {l}) {@ patterns = split (/, /, $ opts {l});} else {$ patterns [0] = '\ *';} # Setting $ | a diverso da zero forza un flush subito e dopo ogni # scrittura o stampa sul canale di output attualmente selezionato. $ | = 1; while (my $ line = <>) {for (my $ c = 0; $ c< = $ # patterns; $ c ++) {if ($ case_sensitive) {if ($ line = ~ / $ patterns [$ c] /) {$ riga = ~ s / ($ pattern [$ c]) / color ("$ color [$ c]"). $ 1.color ("reset") / ge; }} else {if ($ riga = ~ / $ pattern [$ c] / i) {$ line = ~ s / ($ pattern [$ c]) / color ("$ color [$ c]"). $ 1. color ("reset") / ige; }}} print STDOUT $ line;}
Se lo salvi come color
in una directory che si trova nel tuo $ PATH
e rendilo eseguibile ( chmod + x / usr / bin / color
), puoi colorare il modello corrispondente in questo modo:
echo -e "foo \ nbar \ nbaz \ nbib "| color -l foo, bib
Questo produrrà:
Come scritto, lo script ha colori predefiniti per 10 diversi modelli, quindi assegnargli un elenco separato da virgole come nell'esempio sopra colorerà ciascuno dei motivi abbinati in un colore diverso.