GNU/Linux >> Znalost Linux >  >> Linux

Výstup barevného zvýraznění na základě regulárního výrazu v shellu

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

Linux
  1. 2>&1 a porozumění dalším idiomům shell skriptu

  2. Jaký je rozdíl mezi získáním výstupu příkazu pomocí `command` a $(command) v Shell?

  3. Odsazení víceřádkového výstupu ve skriptu shellu

  1. Jak mohu spravovat podrobnost protokolu uvnitř skriptu shellu?

  2. Přesměrování výstupu příkazu v dockeru

  3. Změňte výchozí editor crontab na nano ve FreeBSD

  1. Jak přiřadit výstup příkazu proměnné shellu?

  2. Ukládání výstupu příkazu do proměnné Shell?

  3. Jak zjistit, zda je výstup příkazového nebo shellového skriptu Stdout nebo Stderr?