Erhalten Sie farbige Ergebnisse, wenn Sie ein Rohr von grep to less verwenden

56968
Jeremy Powell

Ich nutze die --colour-Option von grep sehr oft, aber oft auch weniger. Wie kann ich die Grep-Ergebnisse auf weniger reduzieren und trotzdem die Farbgebung beibehalten? (Oder ist das möglich?)

grep "search-string" -R * --colour | less 

BEARBEITEN :

Ich suche eine direkte Lösung oder etwas Äquivalentes dazu.

218
Mögliches Duplikat des Befehls [Farben in "weniger" erhalten] (http://superuser.com/questions/117841/get-colors-in-less-command) Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 9 Jahren 0

5 Antworten auf die Frage

247
drrlvn

Wenn Sie einfach ausführen grep --color, bedeutet grep --color=autodies, dass erkannt wird, ob die Ausgabe ein Terminal ist und falls dies Farben zulässt. Wenn es jedoch eine Pipe erkennt, wird die Färbung deaktiviert. Der folgende Befehl:

grep --color=always -R "search string" * | less 

Aktiviert immer das Einfärben und überschreibt die automatische Erkennung, und Sie erhalten die Farbhervorhebung less.

BEARBEITEN: Obwohl die Verwendung nur lessfür mich funktioniert, benötigen ältere Versionen möglicherweise das -RFlag, um mit Farben umzugehen, wie dies hier vorgeschlagen wurde.

Sie müssen "less -R" verwenden, damit die Farbkodierung weniger korrekt interpretiert wird therefromhere vor 14 Jahren 122
Es funktionierte für mich einfach mit "weniger", es kann von der Version abhängen. drrlvn vor 14 Jahren 1
Beeindruckend. Ich dachte, "auto" hänge nur vom Terminaltyp ab. Ich springe vielleicht die Waffe, aber das kann die Art, wie ich Linux benutze, revolutionieren: P Jeremy Powell vor 14 Jahren 0
Genial. Obwohl ich auch "less -R" verwende, um weniger Farben für die Anzeige von Farben zu erhalten, als für die Fluchtcode-Codes: o) Owen Blacker vor 12 Jahren 0
Ein (hoffentlich) nützlicher Nachtrag: Ich musste einige Übereinstimmungen ausschließen, aber die Farbgebung beibehalten, also endete ich tatsächlich mit `grep pattern file | grep -v badpattern | grep - color = immer muster | weniger -R`, was meinen Bedürfnissen perfekt entsprach. (Danke noch einmal!) Owen Blacker vor 12 Jahren 1
Ich kann nicht glauben, dass sie die Color-Handling-Funktion nur in "less" implementiert haben und deshalb die Chance verpasst haben, ein spezielles "farbloses" Tool zu haben. Allein für den Namen hätte es getan werden sollen! Ich sollte wahrscheinlich einen Patch schreiben, der -R automatisch aufruft, wenn die Binärdatei als "farblos" ausgeführt wird. Christian vor 10 Jahren 7
Yay, funktioniert auch für git log -p. :) David Winiecki vor 10 Jahren 0
@OwenBlacker Der Grund, warum es "nur" für Sie funktioniert, ist wahrscheinlich, dass einige Linux-Distributoren einige Standard-Aliase einrichten. Machen Sie in einem Terminal weniger Alias ​​und sehen Sie, was Sie bekommen. PhilT vor 9 Jahren 0
Die Verwendung von grep ohne "-R" und "more" anstelle von "less -R" funktioniert für mich ... und ist kürzer. Mit anderen Worten, dies funktioniert auf Fedora 20 `grep --color = always -Irn" foo_bar "| mehr` Ray Foss vor 9 Jahren 0
@spatz: Sie könnten [Antwort von Dennis] (http://superuser.com/a/36201/102954) in Ihre integrieren, um daraus einen One-Stop-Shop zu machen. Integrationsantworten sind auf SO unbedingt erwünscht. Vielen Dank! Das würde das Problem lösen, das Owen in seinem Kommentar angesprochen hatte. cfi vor 8 Jahren 0
@OwenBlacker Es ist möglicherweise kein Alias. Sie können `WENIGER mit` -R` eingestellt haben. greyfade vor 7 Jahren 1
Ubuntu 16.04 `cat file.log | grep --color = immer Passwort | weniger -R` Ligemer vor 6 Jahren 0
Um den Standardwert "less" so festzulegen, dass immer Farben durchlaufen werden, bearbeiten Sie die Umgebungsvariable "LESS" so, dass sie -R oder die lange Form "--RAW-CONTROL-CHARS" enthält. Die Variable "LESS" enthält eine durch Leerzeichen getrennte Liste von Standardflags für "less". Rory O'Kane vor 6 Jahren 0
27
Dennis Williamson

Sie können dies in Ihre .bashrcDatei einfügen:

export GREP_OPTIONS="--color=always" 

oder erstellen Sie einen Alias ​​wie folgt:

alias grepc="grep --color=always" 

und Sie müssen die -ROption für lesswie angegeben verwenden

Warnung !: GREP_OPTIONS = "- color = always" kann _many_-Skripts brechen, die grep (oder (e | f) grep) verwenden. mctylr vor 14 Jahren 26
Ja, besser nur Alias ​​grep. Sie können mit `GREP` immer reines` grep` erhalten oder die `--color`-Option manuell überschreiben. asmeurer vor 12 Jahren 4
Das funktioniert nicht für mich, Alias ​​funktioniert aber. saeedgnu vor 10 Jahren 0
4
Iazel

In diesem Fall möchte ich lieber kleine SH-Dateien erstellen und sie anlegen /usr/local/bin.
Normalerweise verwende ich grepdas rekursiv auf dem pwd, also ist dies mein persönliches Skript:

#!/bin/sh grep --color=always -r "$@" . | less -R 

Und dann habe ich es einfach als kopiert /usr/local/bin/g(ja, ich benutze es oft)

Warum nicht einfach Shell-Funktionen für so etwas nutzen? `g () `funktioniert identisch und wird wahrscheinlich (minutiös) eine bessere Leistung erbringen. 00dani vor 7 Jahren 1
1
not2qubit

Verwenden Sie kein Alias ​​"grep", besser ein Alias ​​"weniger", das niemals von Shells verwendet wird. In Ihrem .bashrcgerade setzen: alias less="less -r".

Nicht ganz richtig. Man muss _both_ `grep --color = always` und` less -R` verwenden. Beachten Sie, dass grep nur weiß, dass es in einen anderen Prozess geleitet wird. Die Option `--color = auto` verwendet nur diese Informationen, um zu entscheiden, ob Farben ausgegeben werden oder nicht. brandizzi vor 11 Jahren 3
Beachten Sie, dass sich die Option "-r" von "-R" unterscheidet. Wahrscheinlich ist "-R" sicherer. Craig McQueen vor 10 Jahren 3
Warum also meine Lösung abstimmen? Das OP fragt speziell nach "weniger", wenn das Beispiel bereits die Option --color verwendet. not2qubit vor 10 Jahren 1
Ein Alias ​​ist hier wahrscheinlich unerwünscht. "less" unterstützt eine Umgebungsvariable "$ LESS". Anstelle eines Alias ​​könnte also 'export LESS =' - R'` vorzuziehen sein. greyfade vor 7 Jahren 3
0
Pierre François

Ich muss rennen

grep --color=always -R "search string" * | less - r 

mit dem -r Flag nach weniger, damit dieser ausgeführt wird.