Domyślna opcja koloru Grep

11

grep jest jednym z najczęściej używanych poleceń w systemie Linux. Uważam, że jego podstawową cechą jest podkreślenie szukanego ciągu w liniach wyjściowych. można to osiągnąć za pomocą opcji --color.

Pisanie na klawiaturze - kolor za każdym razem jest denerwujący, a także nieproduktywny. Czy jest jakiś sposób, aby zmienić grep tak, aby zachowywał się jak grep - kolor.

Próbowałem napisać mały skrypt o nazwie grepd i dodałem go do mojej zmiennej PATH. Ale skrypt nie działa na grepd wejściowym . Wszelkie sugestie proszę.

#!/bin/bash
grep --color $1 $2
Srujan Kumar Gulla
źródło

Odpowiedzi:

21

Po prostu dodaj następujący alias do pliku konfiguracyjnego powłoki, np. .bashrcLub .bash_profile(w zależności od tego, którego używasz, patrz tutaj ):

alias grep='grep --color=auto'

Możesz po prostu użyć go jako grep.

Zwykle nie ma potrzeby tworzenia skryptów, gdy proste aliasy poleceń działają tak samo dobrze. W rzeczywistości skrypt nie działałby nawet, gdybyś chciał przekazać więcej opcji grep. Jeśli potrzebujesz małego fragmentu, który może obsługiwać argumenty, powinieneś użyć funkcji .

slhck
źródło
9
Lub równoważnie ustaw GREP_OPTIONSzmienną środowiskową:export GREP_OPTIONS='--color=always'
Jérôme
Nie dodaje to opcji koloru, jeśli używasz fgrep lub egrep, potrzebujesz oddzielnych aliasów dla nich. Ponadto @ Jérôme: GREP_OPTIONS jest oznaczony jako przestarzały na stronie man grep.
Thayne
@Tayne tylko dla GNU grep, a nie dla innych takich jak grep FreeBSD. I o ile wiem, minęły 4 lata, odkąd to zostało zmienione i nadal jest obsługiwane. Amortyzacja nie oznacza usunięcia.
cde
Tak zwykle robię, jednak w niektórych przypadkach nie działa to dobrze. Na przykład: some_command | xargs grep foonie zostanie pokolorowane, ponieważ xargs nie używa aliasu.
TM.
2
#!/bin/sh
exec grep --color "$@"

To ilustruje standardowy sposób „zawijania” polecenia za pomocą skryptu powłoki, gdy polecenie nie działa tak, jak lubisz.

W execunika tworzenia dodatkowego procesu (jeden dla skryptu i jeden dla grep). Możesz to pominąć, jeśli chcesz.

"$@"Zastępuje wszystkie argumenty skryptu, nie ma znaczenia ile istnieją. Prawidłowo zachowuje argumenty ze spacjami i innymi znakami specjalnymi dla powłoki.

Kenster
źródło
„Exec grep” powinien brzmieć „exec / bin / grep”
Berend de Boer
2
@BerenddeBoer Nie bardzo. „exec grep” działałoby dobrze. Nie ma nic złego w wyszukiwaniu ścieżki grep.
Kenster,
-1

spróbuj wprowadzić export GREP_COLORS='AUTO'~ / .bashrc - dla mnie to działa.

od 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
źródło
5
GREP_COLORSjest ustawieniem rzeczywistych kolorów. Ustawienie na AUTOnie powinno pokazywać żadnych kolorów. eksport GREP_OPTIONS = '- color = auto' powinna być odpowiedzią.
user137369,