Odpověď je na superuser.com:
your-command | grep -E --color 'pattern|$'
nebo
your-command | grep --color 'pattern\|$'
To bude "odpovídat vašemu vzoru nebo konci řádku na každém řádku. Zvýrazní se pouze vzor..."
Můžete zkusit (možná je potřeba trochu více uniknout):
BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"
Chcete-li to povolit globálně, budete chtít funkci terminálu, nikoli proces, do kterého převádíte výstup, protože roura by rušila některé příkazy (dva problémy jsou v tom, že stdout a stderr by vypadaly mimo provoz a vyrovnávací paměti a že některé příkazy se při výstupu na terminál chovají odlišně).
Neznám žádný „konvenční“ terminál s touto funkcí. Lze to snadno provést v Emacsu v term
buffer:nakonfigurujte font-lock-keywords
pro term-mode
.
Měli byste si však dobře rozmyslet, zda tuto funkci skutečně neustále chcete. Co když má příkaz své vlastní barvy (např. grep --color
, ls --color
)? Možná by bylo lepší definovat krátký alias pro příkaz colorizer a spustit myCommand 2>&1|c
když chcete obarvit myCommand
výstup uživatele. Můžete také použít alias některé specifické příkazy Always-colorize.
Všimněte si, že návratový stav kanálu je jeho poslední příkaz, takže pokud spustíte myCommand | c
, získáte stav c
, nikoli myCommand
. Zde je obal bash, který se tomuto problému vyhýbá, který můžete použít jako w myCommand
:
w () {
"[email protected]" | c
return $PIPESTATUS[0]
}
Můžete použít programy jako:
- spc (Supercat)
- grc (generický barvivo)
- zvýraznit
- histring
- pygmentovat
- grep --color
Můžete udělat něco takového, ale příkazy neuvidí tty (některé odmítnou běžet nebo se chovat jinak nebo dělat divné věci):
exec > >(histring -fEi error) # Bash