653 Stimmen

Farbiges grep - Anzeige der gesamten Datei mit hervorgehobenen Übereinstimmungen

Ich finde grep 's --color=always Flagge als äußerst nützlich erweisen. Allerdings gibt grep nur Zeilen mit Übereinstimmungen aus (es sei denn, Sie fragen nach Kontextzeilen). Da jede ausgegebene Zeile eine Übereinstimmung aufweist, bringt die Hervorhebung nicht so viel, wie sie könnte.

Ich würde wirklich gerne cat eine Datei und sehen Sie die gesamte Datei mit den hervorgehobenen Mustertreffern.

Gibt es eine Möglichkeit, wie ich grep anweisen kann, jede gelesene Zeile auszugeben, unabhängig davon, ob es eine Übereinstimmung gibt? Ich weiß, dass ich ein Skript schreiben könnte, um grep auf jeder Zeile einer Datei laufen zu lassen, aber ich war neugierig, ob dies mit Standard grep .

1014voto

Ryan Oberoi Punkte 12977

Hier sind einige Möglichkeiten dazu:

grep --color 'pattern\|$' file
grep --color -E 'pattern|$' file
egrep --color 'pattern|$' file

El | Symbol ist der OR-Operator. Entweder Sie entkommen ihm mit \ oder teilen Sie grep mit, dass der Suchtext als reguläre Ausdrücke interpretiert werden muss, indem Sie -E hinzufügen oder die egrep Befehl anstelle von grep .

Der Suchtext "pattern|$" ist eigentlich ein Trick, er findet Zeilen, die pattern ODER Zeilen, die ein Ende haben. Da alle Zeilen ein Ende haben, werden alle Zeilen abgeglichen, aber das Ende einer Zeile ist eigentlich kein Zeichen, also wird es nicht eingefärbt.

Um die farbigen Teile auch durch Rohre zu leiten, z.B. in Richtung less bieten die always Parameter zu --color :

grep --color=always 'pattern\|$' file | less -r
grep --color=always -E 'pattern|$' file | less -r
egrep --color=always 'pattern|$' file | less -r

126voto

Dennis Williamson Punkte 322329

Hier ist etwas, das in die gleiche Richtung geht. Wahrscheinlich verbrauchen Sie sowieso weniger, also versuchen Sie es damit:

less -p pattern file

Das Muster wird markiert und zum ersten Vorkommen in der Datei gesprungen.

Sie können zum nächsten Vorkommen springen mit n und zum vorherigen Vorkommen mit p . Beenden mit q .

51voto

ephemient Punkte 189038

Ich möchte Folgendes empfehlen ack -- besser als grep, ein leistungsstarkes Suchwerkzeug für Programmierer .

$ ack --color --passthru --pager="${PAGER:-less -R}" pattern files
    $ ack --color --passthru pattern files | less -R
    $ export ACK\_PAGER\_COLOR="${PAGER:-less -R}"
$ ack --passthru pattern files

Ich liebe es, weil es standardmäßig eine rekursive Suche in Verzeichnissen durchführt (und so viel intelligenter ist als grep -r ), unterstützt vollständige reguläre Ausdrücke in Perl (und nicht die POSIX-artigen regex(3) ), und hat eine viel schönere Kontextanzeige bei der Suche in vielen Dateien.

32voto

kepkin Punkte 1047

Sie können meine highlight Skript von https://github.com/kepkin/dev-shell-essentials

Es ist besser als grep denn Sie können jede Übereinstimmung mit ihrer eigene Farbe .

$ command_here | highlight green "input" | highlight red "output"

Screen shot from Github project

23voto

Fabien Sa Punkte 8308

Sie können auch einen Alias erstellen. Fügen Sie diese Funktion in Ihre .bashrc (oder .bash_profile unter OSX) ein

function grepe {
    grep --color -E "$1|$" $2
}

Sie können den Alias nun wie folgt verwenden: " ifconfig | grepe inet " oder " grepe css index.html ".

(PS: Vergessen Sie nicht, die source ~/.bashrc um bashrc in der aktuellen Sitzung neu zu laden)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X