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ě.