Frage Less and Grep: Farbige Ergebnisse bei Verwendung einer Pipe von grep zu weniger


Ich benutze die Option --colour von Grep sehr, aber ich benutze oft auch weniger. Wie kann ich Grep Ergebnisse zu weniger und noch die Färbung beibehalten. (Oder ist das möglich?)

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

BEARBEITEN:

Ich suche nach einer direkten Lösung oder etwas, das dem entspricht.


211
2017-09-04 21:46


Ursprung


mögliches Duplikat von Erhalte Farben im 'less' -Befehl - Ciro Santilli 新疆改造中心 六四事件 法轮功


Antworten:


Wenn du einfach rennst grep --color es impliziert grep --color=auto was erkennt, ob der Ausgang ein Terminal ist und wenn ja, aktiviert Farben. Wenn es jedoch eine Pipe erkennt, wird die Färbung deaktiviert. Der folgende Befehl:

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

Aktivieren Sie immer die Farbgebung und überschreiben Sie die automatische Erkennung, und Sie erhalten die Farbhervorhebung in less.

BEARBEITEN: Obwohl nur verwendet less funktioniert für mich, vielleicht ältere Version benötigt die -R Flagge, um Farben zu behandeln, wie es hier vorgeschlagen wird.


243
2017-09-04 22:35



Sie müssen verwenden less -R damit die Farbcodierung weniger korrekt interpretiert wird - therefromhere
Es hat mit mir nur geklappt less, es kann versionsabhängig sein. - drrlvn
Ein (hoffentlich) nützlicher Nachtrag: Ich musste einige Matches ausschließen, aber die Färbung beibehalten, also endete ich mit grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, die meine Bedürfnisse perfekt erfüllt haben. (Danke noch einmal!) - Owen Blacker
Ich kann nicht glauben, dass sie nur die Farbverarbeitungsfunktion in implementiert haben less und verpasste daher die Chance, ein besonderes zu haben colorless Werkzeug. Für den Namen sollte es schon gemacht sein! Ich sollte wahrscheinlich einen Patch schreiben, der -R automatisch aufruft, wenn die Binärdatei als ausgeführt wird colorless. - Christian
@OwenBlacker Es ist möglicherweise kein Alias. Vielleicht hast du $LESS eingestellt mit -R. - greyfade


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

export GREP_OPTIONS="--color=always"

oder erstelle einen Alias ​​wie diesen:

alias grepc="grep --color=always"

und du wirst das benutzen müssen -R Option für lesswie hieraus hervorgeht


27
2017-09-05 10:46



Warnung !: GREP_OPTIONS = "- color = immer" kann brechen viele Skripte, die grep verwenden (oder (e | f) grep). - mctylr
Ja, besser, nur Grep zu nennen. Du kannst immer rein werden grep mit GREPoder überschreiben Sie die --color Option manuell. - asmeurer
Das funktioniert nicht für mich, Alias ​​funktioniert aber. - saeedgnu


In diesem Fall ziehe ich es vor, kleine SH-Dateien zu erstellen und anzulegen /usr/local/bin.
Ich benutze normalerweise grep rekursiv auf der pwdDas ist mein persönliches Skript:

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

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


4
2017-09-30 21:48



Warum nicht einfach Shell-Funktionen für diese Art von Dingen verwenden? g() { grep --color=always -r "$@" . | less -R } funktioniert identisch und wahrscheinlich (geringfügig) bessere Leistung. - 00dani


Alias ​​"grep" nicht, alias "less" besser, was niemals von Shells verwendet wird. In deinem .bashrc einfach gesagt: alias less="less -r".


0
2018-01-20 10:28



Nicht ganz richtig. Man muss verwenden beide  grep --color=always und less -R. Beachten Sie, dass grep nur weiß, dass es in einen anderen Prozess geleitet wird --color=auto Option verwendet ausschließlich diese Informationen, um zu entscheiden, ob Farben ausgegeben werden oder nicht. - brandizzi
Beachten Sie, dass less Möglichkeit -r ist anders als -R. Wahrscheinlich -R ist sicherer. - Craig McQueen
Warum also meine Lösung abstimmen? Das OP fragt ausdrücklich danach less Im Beispiel wurde bereits die Option `--color 'verwendet. - not2qubit
Ein Alias ​​ist hier wohl unerwünscht. less unterstützt a $LESS Umgebungsvariable. Also, anstatt eines Alias, export LESS='-R' könnte vorzuziehen sein. - greyfade


Ich muss rennen

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

mit dem -r Fahne nach Weniger, damit das läuft.


0
2018-01-18 10:51