Verwenden Sie ack. Überprüfen Sie seinen --passthru
Option hier:ack. Es hat den zusätzlichen Vorteil, dass es vollständige reguläre Perl-Ausdrücke erlaubt.
$ ack --passthru 'pattern1' file_name
$ command_here | ack --passthru 'pattern1'
Sie können dies auch mit grep wie folgt tun:
$ grep --color -E '^|pattern1|pattern2' file_name
$ command_here | grep --color -E '^|pattern1|pattern2'
Dadurch werden alle Linien abgeglichen und die Muster hervorgehoben. Die ^
stimmt mit jedem Zeilenanfang überein, wird aber nicht gedruckt/hervorgehoben, da es kein Zeichen ist.
(Beachten Sie, dass die meisten Setups standardmäßig --color verwenden. Möglicherweise benötigen Sie dieses Flag nicht).
Sie können sicherstellen, dass alle Zeilen übereinstimmen, aber bei irrelevanten Übereinstimmungen gibt es nichts hervorzuheben
egrep --color 'apple|' test.txt
Hinweise:
egrep
kann auchgrep -E
geschrieben werden--color
ist normalerweise in den meisten Distributionen standardmäßig- Einige Varianten von grep "optimieren" die leere Übereinstimmung, daher sollten Sie stattdessen "apple|$" verwenden (siehe:https://stackoverflow.com/a/13979036/939457)
BEARBEITEN:
Dies funktioniert mit grep von OS X Mountain Lion:
grep --color -E 'pattern1|pattern2|$'
Das ist besser als '^|pattern1|pattern2'
weil die ^
Ein Teil der Alternation passt zum Anfang der Zeile, während der $
Übereinstimmungen am Ende der Zeile. Einige Engines für reguläre Ausdrücke heben pattern1
nicht hervor oder pattern2
weil ^
bereits abgestimmt und die Engine ist eifrig .
Etwas Ähnliches passiert für 'pattern1|pattern2|'
weil die Regex-Engine bemerkt, dass die leere Alternation am Ende der Musterzeichenfolge mit dem Anfang der Ausgangszeichenfolge übereinstimmt.
[1]: http://www.regular-expressions.info/engine.html
ERSTE BEARBEITUNG:
Am Ende habe ich Perl verwendet:
perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'
Dies setzt voraus, dass Sie ein ANSI-kompatibles Terminal haben.
URSPRÜNGLICHE ANTWORT:
Wenn Sie mit einem seltsamen grep
stecken bleiben , das könnte funktionieren:
grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'
Passen Sie die Zahlen an, um alle gewünschten Linien zu erhalten.
Die zweite grep
entfernt nur überflüssiges --
Zeilen, die durch den BSD-Stil grep
eingefügt wurden auf Mac OS X Mountain Lion, auch wenn sich der Kontext aufeinanderfolgender Spiele überschneidet.
Ich dachte, GNU grep hätte --
weggelassen Zeilen, wenn sich der Kontext überschneidet, aber es ist schon eine Weile her, also erinnere ich mich vielleicht falsch.