Wenn ich in Bash einen Befehl ausführen und nur Ausgabezeilen anzeigen möchte, die einem bestimmten Muster entsprechen, kann ich ihn grep
wie folgt weiterleiten
Datei Testdatei
hello
there
my
friends
Befehl
$ cat testfile | grep 'hello'
hello #this will be highlightd
Dadurch wird die Suchübereinstimmung hervorgehoben und die gesamte Zeile angezeigt, auf die sie fällt. Ich kann Zeilen vor und nach dieser Zeile verwenden -A
und -B
anzeigen. Meine Frage ist, ob es möglich ist, den Befehl auszuführen und alle Ausgaben wie gewohnt anzuzeigen, aber die Suchübereinstimmungen wie bei grep hervorzuheben? so wäre meine Ausgabe
hello #highlighted
there
my
friends
linux
command-line
bash
grep
ewok
quelle
quelle
Antworten:
So verwenden Sie ein Farb-GREP, um nur übereinstimmende Muster hervorzuheben, die Ausgabe jedoch nicht anderweitig zu ändern:
Das erste Muster stimmt mit allen Zeilen überein (alle Zeilen werden gedruckt). Das zweite Muster (und alle folgenden Muster) bewirken, dass der übereinstimmende Text farblich hervorgehoben wird.
Da das erste Muster mit allen Zeilen übereinstimmt, jedoch nicht mit einem druckbaren Zeichen übereinstimmt, werden keine farblichen Hervorhebungen hinzugefügt, sodass die Lesbarkeit des hervorgehobenen Textes nicht konkurriert oder beeinträchtigt wird.
quelle
kubectl apply -k . | grep --color=always -e "^" -e "configured"
in zsh"^"
müssen das zweite sein).Fügen Sie
-z
Ihrem GNU grep-Befehl eine Option hinzu :oder kürzer
quelle
grep --color "hello\|$" file
Ähnlich wie bei der vorherigen Antwort können Sie alle
$
Zeilenenden abfangen :-E
(oder--extended-regexp
) bedeutet, dass Sonderzeichen mit maskiert werden müssen\
. Wenn Sie es verwenden,|
wird es als regulärer "ODER" -Zustand behandelt.Grep
|$
fängt und druckt auch alle Zeilen, die ein Ende haben. Da $ jedoch ein verstecktes Zeichen ist, kann es nicht hervorgehoben werden.Aktualisieren:
Wenn Sie die gesamte Ausgabe drucken möchten, aber auch den Exit-Code zurückgeben möchten , unabhängig davon, ob eine Übereinstimmung gefunden wurde oder nicht, können Sie den Befehl perl verwenden:
Wenn Sie sed bevorzugen - Hier ist ein Beispiel, wie Sie alle Übereinstimmungen markieren + den Exit-Code zurückgeben, wenn keine Übereinstimmung gefunden wurde: /ubuntu//a/1200851/670392
quelle
Dieser funktioniert sowohl mit GNU grep als auch mit grep unter FreeBSD:
Es entspricht dem Text "Hallo" oder (
\|
) der nicht druckbaren Nullzeichenfolge am Ende jeder Zeile ($
). Deshalb wird jede Zeile gedruckt, aber nur "Hallo" wird hervorgehoben.Möglicherweise haben Sie bereits
--color=auto
in Ihrer Shell konfiguriert. Dann müssen Sie höchstwahrscheinlich nicht angeben--color=always
:Sie können die Version auch vereinfachen, indem Sie
egrep
(mit erweiterten regulären Ausdrücken) verwenden, wobei|
für den Ausdruck "oder" kein Escapezeichen erforderlich ist:quelle
Hinzufügen zur obersten Antwort oben. Die in den Kommentaren erwähnte Hervorhebungsfunktion {} funktioniert nur, wenn Daten in sie geleitet werden. Der folgende Alias ist zwar nicht perfekt, aber nützlicher:
Dies funktioniert mit Befehlen wie:
quelle