ich finde grep
die --color=always
Flagge enorm nützlich. Grep druckt jedoch nur Zeilen mit Übereinstimmungen (es sei denn, Sie fragen nach Kontextzeilen). Da jede Zeile, die gedruckt wird, eine Übereinstimmung aufweist, bietet die Hervorhebung nicht so viele Funktionen wie möglich.
Ich würde wirklich gerne cat
eine Datei und die gesamte Datei mit den hervorgehobenen Musterübereinstimmungen sehen.
Kann ich grep auf irgendeine Weise anweisen, jede gelesene Zeile zu drucken, unabhängig davon, ob eine Übereinstimmung vorliegt? Ich weiß, dass ich ein Skript schreiben kann, um grep in jeder Zeile einer Datei auszuführen, aber ich war neugierig, ob dies mit Standard möglich ist grep
.
sed
. Mit dersed
Lösung erhalten Sie mehrere Farben auf Kosten der zusätzlichen Komplexität (anstelle von etwa 30 Zeichen haben Sie etwa 60 Zeichen).Antworten:
Hier sind einige Möglichkeiten, dies zu tun:
quelle
egrep --color "pattern|" file
(credit stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$"
. Andernfalls erfolgt die Farbhervorhebung nicht.Hier ist etwas in die gleiche Richtung. Die Chancen stehen gut, dass Sie sowieso weniger verbrauchen. Versuchen Sie Folgendes:
Das Muster wird hervorgehoben und zum ersten Vorkommen in der Datei gesprungen.
quelle
-
:… | less -p pattern -
-i
Option hinzufügen, wird die Übereinstimmung zwischen Groß- und Kleinschreibung nicht berücksichtigtless -ip pattern file
.less
den-R
Schalter… | less -Rip introduction -
Ich möchte ack empfehlen - besser als grep, ein Power-Suchwerkzeug für Programmierer .
Ich liebe es, weil es standardmäßig rekursiv in Verzeichnissen durchsucht wird (und so viel intelligenter ist als
grep -r
), reguläre Perl-Ausdrücke (anstelle von POSIXishregex(3)
) unterstützt und beim Durchsuchen vieler Dateien eine viel schönere Kontextanzeige hat.quelle
ack
ist klug, aber manchmal zu klug, und es schloss den Dateityp aus, in dem der Treffer war.ack -a
wird alle Dateitypen durchsuchen, während immer noch.git/
.svn/
usw. ausgeschlossen sindack
meine Bilder nicht zu durchsuchen, also-a
zu viel. Ich habe--type-set=freemarker=.ftl
zu meiner~/.ackrc
, um ein Beispiel zu geben.Sie können mein
highlight
Skript unter https://github.com/kepkin/dev-shell-essentials verwendenEs ist besser, als
grep
weil Sie jedes Spiel mit seiner eigenen Farbe hervorheben können .quelle
grep
, die ein Standarddienstprogramm auf Computern ist, auf denen * nix ausgeführt wird.colout
in einer anderen Antwort erwähnt.colout
, was gut ist, wenn Sie überprüfen möchten, was es tut.Sie können auch einen Alias erstellen. Fügen Sie diese Funktion in Ihr .bashrc (oder .bash_profile auf osx) ein.
Sie können den Alias jetzt wie folgt verwenden: "
ifconfig | grepe inet
" oder "grepe css index.html
".(PS: Vergiss nicht,
source ~/.bashrc
bashrc in der aktuellen Sitzung neu zu laden)quelle
--color=always
anstelle von--color
less
Verwenden Sie zum Interpretieren der Farbcodesless -R
.Verwenden Sie das
colout
Programm: http://nojhan.github.io/colout/Es wurde entwickelt, um einem Textstrom farbliche Hervorhebungen hinzuzufügen. Bei einem regulären Ausdruck und einer Farbe (z. B. "Rot") wird ein Textstrom mit hervorgehobenen Übereinstimmungen reproduziert. z.B:
Sie können mehrere Aufrufe verketten, um mehrere verschiedene Farbmarkierungen hinzuzufügen:
Oder Sie können dasselbe erreichen, indem Sie einen regulären Ausdruck mit N Gruppen (in Klammern gesetzte Teile des regulären Ausdrucks) gefolgt von einer durch Kommas getrennten Liste von N Farben verwenden.
quelle
grep
und es bereits in den Antworten erweitert ist,colout
ist dies die beste Lösung für das Problem, das Sie hatten, das Beste, das mir bekannt ist. Gemäß der UNIX-Philosophie sollten Programme so geschrieben werden, dass sie eines gut machen. Denngrep
es filtert Textstrom. Denncolout
es färbt oder hebt Textströme hervor.colout
ein äußerst nützliches Werkzeug ist. Lernen Sie es einmal, verwenden Sie es in vielen Situationen, anstatt ein Tool zum Hervorheben von Protokolldateien, ein anderes zum Hervorheben der Testausgabe usw. zu lernenIch benutze RCG von "Linux Server Hacks", O'Reilly. Es ist perfekt für das, was Sie wollen und kann mehrere Ausdrücke mit jeweils unterschiedlichen Farben hervorheben.
quelle
Die
-z
Option für grep ist auch ziemlich schick!quelle
Ich habe dies zu meinen .bash_aliases hinzugefügt:
quelle
Um Muster hervorzuheben, während die gesamte Datei angezeigt wird, kann h dies tun.
Außerdem werden unterschiedliche Farben für unterschiedliche Muster verwendet.
Sie können die Ausgabe von auch
h
zumless -R
besseren Lesen weiterleiten.Um für jedes Muster 1 Farbe zu verwenden, könnte cxpgrep eine gute Passform sein.
quelle
Ok, das ist eine Möglichkeit,
gibt Ihnen die Zeilenanzahl - sagen Sie NN, dann können Sie tun
quelle
Hier ist ein Shell-Skript, das die gsub-Funktion von Awk verwendet, um den gesuchten Text durch die richtige Escape-Sequenz zu ersetzen und ihn in leuchtendem Rot anzuzeigen:
Verwenden Sie es so:
Leider hat es nicht alle Funktionen von grep.
Weitere Informationen finden Sie in einem Artikel " So gefällt Ihnen Farbe " im Linux Journal
quelle
Eine andere Antwort erwähnte den -Cn-Schalter von grep, der n Kontextzeilen enthält. Ich mache dies manchmal mit n = 99, um schnell und schmutzig einen Kontext zu erhalten, wenn das egrep-Muster zu fummelig erscheint oder wenn ich mich auf einem Computer befinde, auf dem ich rcg nicht installiert habe und / oder ccze.
Ich habe kürzlich entdeckt,
ccze
welches ein stärkerer Farbstoff ist. Meine einzige Beschwerde ist, dass es bildschirmorientiert ist (wieless
ich es aus diesem Grund nie benutze), es sei denn, Sie geben den -A-Schalter für die "rohe ANSI" -Ausgabe an.+1 für die
rcg
oben erwähnte Erwähnung. Es ist immer noch mein Favorit, da es so einfach ist, es in einem Alias anzupassen. So etwas ist normalerweise in meinem ~ / .bashrc:alias tailc = 'tail -f / my / app / log / file | rcg send "BOLD GREEN" empfange "CYAN" Fehler "RED" '
quelle
ein anderer schmutziger Weg:
Ich habe eine gemacht
in bashrc.
quelle
Alternativ können Sie The Silver Searcher verwenden und tun
quelle
Wenn Sie mehrere Muster mit unterschiedlichen Farben hervorheben möchten, siehe dieses Bash-Skript.
Grundlegende Verwendung:
Sie können Muster und Farben ändern, während Sie eine Taste drücken und dann die Taste eingeben.
quelle
Ich benutze folgenden Befehl für ähnliche Zwecke:
grep -C 100 searchtext file
Dies bedeutet grep, um 100 * 2 Kontextzeilen vor und nach dem hervorgehobenen Suchtext zu drucken.
quelle
Hier ist mein Ansatz , inspiriert von der Lösung von @ kepkin:
Dies akzeptiert mehrere Argumente (aber Sie können die Farben nicht anpassen). Beispiel:
quelle
Option
-C999
führt den Trick aus, wenn keine Option zum Anzeigen aller Kontextzeilen vorhanden ist. Die meisten anderen grep-Varianten unterstützen dies ebenfalls. Jedoch: 1) wird keine Ausgabe erzeugt, wenn keine Übereinstimmung gefunden wird, und 2) diese Option wirkt sich negativ auf die Effizienz von grep aus: wenn die-C
Wert groß ist, müssen möglicherweise viele Zeilen vorübergehend im Speicher gespeichert werden, damit grep bestimmt, welche Kontextzeilen verwendet werden um anzuzeigen, wann eine Übereinstimmung auftritt. Beachten Sie, dass Grep-Implementierungen keine Eingabedateien laden, sondern einige Zeilen lesen oder ein Schiebefenster über der Eingabe verwenden. Der "Vorher-Teil" des Kontexts muss in einem Fenster (Speicher) aufbewahrt werden, um die "Vorher" -Kontextzeilen später auszugeben, wenn eine Übereinstimmung gefunden wird.Ein Muster wie
^|PATTERN
oderPATTERN|$
oder ein beliebiges leeres Matching-Untermuster[^ -~]?|PATTERN
ist ein netter Trick. 1) Diese Muster zeigen jedoch keine nicht übereinstimmenden Linien, die als Kontext hervorgehoben sind, und 2) dies kann nicht in Kombination mit einigen anderen Grep-Optionen wie-F
und verwendet werden-w
.Keiner dieser Ansätze befriedigt mich also. Ich verwende ugrep und erweitertes grep mit der Option
-y
, alle nicht übereinstimmenden Ausgaben effizient als farblich hervorgehobene Kontextzeilen anzuzeigen. Andere grep-ähnliche Tools wie ag und ripgrep bieten ebenfalls eine Pass-Through-Option. Aber ugrep ist kompatibel mit GNU / BSD grep und bietet eine Obermenge von grep-Optionen wie-y
und-Q
. Die folgende Option-y
wird beispielsweise in Kombination mit-Q
(interaktive Abfrage-Benutzeroberfläche zur Eingabe von Mustern) angezeigt:quelle