C'è una risposta in superuser.com:
your-command | grep -E --color 'pattern|$'
o
your-command | grep --color 'pattern\|$'
Questo "corrisponderà al tuo schema o alla fine della riga su ogni riga. Viene evidenziato solo lo schema..."
Potresti provare (forse ha bisogno di un po' più di sfuggita):
BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"
Se vuoi abilitarlo a livello globale, vorrai una funzionalità di terminale, non un processo in cui convogli l'output, perché un pipe danneggerebbe alcuni comandi (due problemi sono che stdout e stderr apparirebbero fuori servizio e bufferizzato e che alcuni comandi si comportano in modo diverso quando vengono inviati a un terminale).
Non conosco nessun terminale “convenzionale” con questa caratteristica. È facile farlo in Emacs, in un term
buffer:configura font-lock-keywords
per term-mode
.
Tuttavia, dovresti pensare attentamente se vuoi davvero quella funzione tutto il tempo. Cosa succede se il comando ha i propri colori (ad es. grep --color
, ls --color
)? Forse sarebbe meglio definire un breve alias per un comando colorizer ed eseguire myCommand 2>&1|c
quando vuoi colorare myCommand
l'uscita di. Potresti anche creare degli alias per alcuni comandi specifici colora sempre.
Tieni presente che lo stato di ritorno di una pipeline è last comando, quindi se esegui myCommand | c
, otterrai lo stato di c
, non myCommand
. Ecco un wrapper bash che evita questo problema, che puoi usare come w myCommand
:
w () {
"[email protected]" | c
return $PIPESTATUS[0]
}
Puoi usare programmi come:
- spc (Supercat)
- grc (coloratore generico)
- evidenziare
- histring
- pigmentizza
- grep --colore
Puoi fare qualcosa del genere, ma i comandi non vedranno un tty (alcuni si rifiuteranno di eseguire o si comporteranno in modo diverso o faranno cose strane):
exec > >(histring -fEi error) # Bash