Grep Standardfarboption

11

grep ist einer der am häufigsten verwendeten Befehle unter Linux. Ich habe das Gefühl, dass es die grundlegende Funktion ist, die gesuchte Zeichenfolge in den Ausgabezeilen hervorzuheben. Dies kann durch die Option --color erreicht werden.

Jedes Mal --color zu tippen ist nervig und auch nicht produktiv. Gibt es eine Möglichkeit, grep so zu ändern, dass es sich wie grep - color verhält?

Ich habe versucht, ein kleines Skript mit dem Namen grepd zu schreiben, und dies meiner PATH-Variablen hinzugefügt. Das Skript funktioniert jedoch nicht mit der Eingabe grepd . Anregungen bitte.

#!/bin/bash
grep --color $1 $2
Srujan Kumar Gulla
quelle

Antworten:

21

Fügen Sie einfach den folgenden Alias ​​zur Konfigurationsdatei Ihrer Shell hinzu, z. B. .bashrcoder .bash_profile(je nachdem, welchen Sie verwenden, siehe hier ):

alias grep='grep --color=auto'

Sie können es einfach als verwenden grep.

Es ist normalerweise nicht erforderlich, Skripte zu erstellen, wenn einfache Befehls-Aliase dasselbe tun. Tatsächlich würde Ihr Skript nicht einmal funktionieren, wenn Sie mehr Optionen an übergeben möchten grep. Wenn Sie ein kleines Snippet benötigen, das mit Argumenten umgehen kann, sollten Sie Funktionen verwenden .

slhck
quelle
9
Oder stellen Sie gleichwertig die GREP_OPTIONSUmgebungsvariable ein:export GREP_OPTIONS='--color=always'
Jérôme
Wenn Sie fgrep oder egrep verwenden, wird die Farboption nicht hinzugefügt. Für diese benötigen Sie separate Aliase. Außerdem wird @ Jérôme: GREP_OPTIONS in der grep-Manpage als veraltet markiert.
Thayne
@Thayne nur für GNU grep und nicht für andere wie FreeBSD grep. Und soweit ich das beurteilen kann, ist es 4 Jahre her, dass dies geändert wurde und es wird immer noch unterstützt. Abgeschrieben bedeutet nicht entfernt.
CD
Dies ist, was ich normalerweise mache, aber es funktioniert in einigen Fällen nicht richtig. Beispiel: some_command | xargs grep fooWird nicht eingefärbt, da xargs den Alias ​​nicht verwendet.
TM.
2
#!/bin/sh
exec grep --color "$@"

Dies zeigt die Standardmethode zum "Umschließen" eines Befehls mit einem Shell-Skript, wenn der Befehl nicht ganz so funktioniert, wie Sie es möchten.

Die execvermeidet einen zusätzlichen Prozess (eine für das Skript und einen für grep) zu schaffen. Sie können es weglassen, wenn Sie möchten.

Das "$@"wird durch alle Argumente des Skripts ersetzt, egal wie viele es gibt. Argumente mit Leerzeichen und anderen Zeichen, die für die Shell spezifisch sind, werden korrekt beibehalten.

Kenster
quelle
Das "exec grep" sollte "exec / bin / grep" sein
Berend de Boer
2
@BerenddeBoer Nicht wirklich. "exec grep" würde gut funktionieren. Es ist nichts Falsches daran, den Pfad nach grep zu durchsuchen.
Kenster
-1

versuche export GREP_COLORS='AUTO'dein ~ / .bashrc einzutragen - bei mir funktioniert es.

von man grep

       --color[=WHEN], --colour[=WHEN]
          Surround  the  matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields and groups of context lines) with escape sequences
          to display them in color on the terminal.  The colors are defined by the environment variable GREP_COLORS.  The deprecated environment variable GREP_COLOR is still supported, but  its  setting
          does not have priority.  WHEN is never, always, or auto.
mroz
quelle
5
GREP_COLORSIst das Set die tatsächlichen Farben. Bei der Einstellung auf AUTOsollten keine Farben angezeigt werden. export GREP_OPTIONS = '- color = auto' sollte die Antwort sein.
user137369