GNU/Linux >> Znalost Linux >  >> Linux

Zvýrazněte text podobný grepu, ale nefiltrujte text

Použijte ack. Podívejte se na jeho --passthru možnost zde:ack. Má další výhodu v tom, že umožňuje plné regulární výrazy perlu.

$ ack --passthru 'pattern1' file_name

$ command_here | ack --passthru 'pattern1'

Můžete to také udělat pomocí grep takto:

$ grep --color -E '^|pattern1|pattern2' file_name

$ command_here | grep --color -E '^|pattern1|pattern2'

To bude odpovídat všem čarám a zvýrazní vzory. ^ odpovídá každému začátku řádku, ale nebude vytištěn/zvýrazněn, protože to není znak.

(Všimněte si, že většina nastavení bude standardně používat --color. Tento příznak možná nebudete potřebovat).


Můžete se ujistit, že se všechny řádky shodují, ale na irelevantních shodách není nic ke zvýraznění

egrep --color 'apple|' test.txt 

Poznámky:

  • egrep může být napsáno také grep -E
  • --color je obvykle výchozí ve většině distribucí
  • Některé varianty grep „optimalizují“ prázdnou shodu, takže možná budete chtít místo toho použít „apple|$“ (viz:https://stackoverflow.com/a/13979036/939457)

UPRAVIT:

Toto funguje s grep OS X Mountain Lion:

grep --color -E 'pattern1|pattern2|$'

Toto je lepší než '^|pattern1|pattern2' protože ^ část alternace se shoduje na začátku řádku, zatímco $ zápasy na konci řádku. Některé nástroje regulárních výrazů nezvýrazní pattern1 nebo pattern2 protože ^ již spárované a motor je ochotný .

Něco podobného se stane pro 'pattern1|pattern2|' protože modul regulárních výrazů si všimne, že prázdná alternace na konci řetězce vzoru odpovídá začátku řetězce předmětu.

[1]: http://www.regular-expressions.info/engine.html

PRVNÍ ÚPRAVA:

Nakonec jsem použil perl:

perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'

To předpokládá, že máte terminál kompatibilní s ANSI.

PŮVODNÍ ODPOVĚĎ:

Pokud jste uvízli u podivného grep , mohlo by to fungovat:

grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'

Upravte čísla, abyste získali všechny požadované řádky.

Druhý grep pouze odstraní nadbytečné -- řádky vložené pomocí BSD stylu grep na Mac OS X Mountain Lion, i když se kontext po sobě jdoucích shod překrývá.

Myslel jsem, že GNU grep vynechal -- řádky, když se kontext překrývá, ale už je to nějakou dobu, takže si možná pamatuji špatně.


Linux
  1. Jak zvýraznit slovo ve výstupu „kočka“?

  2. Rozbalením souboru .gz získáte textový soubor, ale získáte binární soubor?

  3. VPS vs VPN – Podobné názvy, ale zcela odlišné funkce

  1. Jak najít konkrétní text pomocí GREP v systému Linux

  2. Jak povolit barvu textu ve vi podobnou vim v CentOS/RHEL

  3. Odstraňte prázdné řádky v textovém souboru pomocí grep

  1. Příkaz Linux:Jak „najít“ pouze textové soubory?

  2. Jak mohu odfiltrovat jedinečné výsledky z výstupu grep?

  3. Vysoké využití paměti, ale žádný proces ji nepoužívá