Antworten:
Der grep
Befehl akzeptiert eine --color=always
Option, die Sie verwenden können
grep 'keyword1' file.log --color=always | grep 'keyword2'
Wie gertvdijk betont, ist dieser Befehl möglicherweise ineffizient, sucht jedoch nach allen Zeilen, die sowohl keyword1 als auch keyword2 enthalten. Wenn Sie sie in verschiedenen Farben hervorheben möchten, können Sie verwenden
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
Dadurch wird Keyword2 blau hervorgehoben. Der mt
Teil bedeutet, dass grep
mit diesem CSI-Code übereinstimmender Text hervorgehoben wird , und 01;34
bedeutet "fetter blauer Vordergrund auf normalem Hintergrund".
grep -R --color=always keyword1 . | grep keyword2
sollte funktionieren. Leiten Sie die Ausgabe erneut um (z. B. durch Weiterleiten der Sekunde grep
an less -R
)? In diesem Fall müssen Sie --color=always
auch die zweite hinzufügen .
--color=auto
wäre für die Sekunde grep
unmittelbar danach ein erforderlich 'keyword2'
.
--color=always
habe die Antwort ergänzt, weil du sie vielleicht weiterleiten willst less
oder so.
Versuchen Sie es mit regulären Ausdrücken, anstatt sie an eine andere Instanz weiterzuleiten grep
, z.
grep -E "\<foo\>.*\<bar\>" file
Dies beschränkt sich leider nur auf übereinstimmende Zeilen, in denen die Schlüsselwörter in dieser Reihenfolge übereinstimmen. Wie auch immer, die Verwendung von grep
in Ihrer Frage ist eher ineffizient und Sie sollten es vermeiden. Die Antwort von @DanielH ist für Ihren Fall wahrscheinlich viel einfacher.
Für ein 'oder' Matching von Keywords verwende ich dies regelmäßig:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
, oder ob dies für diesen Fall überhaupt notwendig ist (das scheint eine Protokolldatei zu sein, die wahrscheinlich eine Standardreihenfolge für die Schlüsselwörter haben würde). Ich habe meine Antwort hinzugefügt, bevor Sie Ihre aktualisiert haben, aber ich behalte sie für den Fall bei, dass verkettete grep
s wirklich erforderlich sind (oder zu einem anderen Zeitpunkt sollte keine farbige Ausgabe an das Terminal gesendet werden, z. B. grep | less -R
).