Wenn ich zwei aufeinanderfolgende grep
Befehle verwende, zB:
echo "foo bar" | grep foo | grep bar
Dann wird das erste Muster ("foo") nicht hervorgehoben. Tatsächlich scheint grep Farbcodes aus seiner Eingabe zu entfernen. Gibt es eine Möglichkeit, dies zu verhindern?
Antworten:
Verwenden Sie
--color=always
.grep
Erkennt, ob die Ausgabe in eine Pipe (oder Datei) erfolgt. Sie möchten meistens keine Farben, wenn die Ausgabe in einer Datei erfolgen soll - das sind Escape-Sequenzen für das Terminal. Normalerweise:von zB:
Zum Überschreiben verwenden
--color=always
.Beispiel:
Datei haben:
Dann
würde färben
ID
,2013
undfoo
.würde färben
ID
undfoo
, aber nicht2013
.1 Wichtig: Sie müssen auch bedenken, dass die hinzugefügte Unordnung von Farben an den nächsten Befehl in der Kette übergeben wird. Sobald der Ausweis gefärbt ist, können Sie ihn (mit Leichtigkeit) nicht mehr zuordnen, z
ID=111
.Manchmal möchte man vielleicht Terminalfarben in einer Datei haben . Versuchen Sie zB
Die resultierende Datei wäre jedoch nur sehr eingeschränkt portabel.
Die Färbung selbst ist auch eine Erweiterung.
Wie von der guten @slm erwähnt , können Sie hinzufügen:
zu Ihrem
.bashrc
etc, aber nicht, wenn Sie aus irgendeinem Grund die Implikationen wirklich verstehen und es immer noch tun wollen. Es würde in vielerlei Hinsichtgrep
aufgrund der oben genannten Tatsache brechen 1 .Fügen Sie ein hinzu,
alias
wenn Sie es häufig verwenden.GREP_OPTIONS
und--color
nehmen Sie drei Optionen :never
,auto
undalways
. Die beiden ersten sollten die einzigen sein, die berücksichtigt werdenGREP_OPTIONS
.Sie können auch auf
GREP_COLORS
denman
Seiten oder bei gnu grep nachsehen .quelle
export GREP_OPTIONS="--color=always"
Fügen Sie dies auch zur Antwort hinzu: In einer .bashrc-Datei werden die Optionen zu Standardeinstellungen für alle greps, und Sie haben es so ziemlich geschafft!ls
und Gnu-Coreutils.