Odpowiedzi:
alias cgrep='grep -nR --color'
Stosowanie:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
Również jeden z moich ulubionych:
$ pgrep some-hanging-process
wyświetli listę wszystkich procesów, które pasują do nazwy jakiegoś wiszącego procesu, którego możesz użyć w następującej sytuacji:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
powinny być ogólnie bardziej korzystne niż grep -R
jak były nie przechodzić dowiązania.
Odkryłem, że najlepszym sposobem na alfons grep jest użycie ack , który jest zasadniczo rekurencyjnym grepem z inteligentną listą ignorowania (np. Nie przeszukuje katalogów .svn, ignoruje pliki kopii zapasowych itp.), Podświetlenie kolorów wyników i perl regexps. To jest to, co chcesz, aby grep robił w 98,6% przypadków.
Ustawiłem to w moim .bashrc, zamiast redefiniować grep za pomocą aliasu:
export GREP_OPTIONS="--color=auto"
Dla mnie działa to w systemach Linux, MacOSX i FreeBSD.
GREP_OPTIONS
należy uznać za szkodliwe. Polecam alias
zamiast tego użyć . Zobacz tutaj: bugs.launchpad.net/ubuntu/+bug/67141
Polecam unikanie zmiennej środowiskowej GREP_OPTIONS, wpłynie to na każde wywołanie grep, nawet tych osadzonych w innych narzędziach. Jeśli te narzędzia oczekują, że grep będzie się zachowywał w jeden sposób, a ty zmienisz to zachowanie, spowoduje to uszkodzenie narzędzi.
Zamiast tego możesz utworzyć alias, który działa dobrze. Wpłynie to tylko na wywołania grep z interaktywnej powłoki (tzn. Że sam piszesz).
Ostatnią opcją, która najbardziej mi się podoba, jest stworzenie skryptu otoki, który wywołuje grep. Wolę to od aliasu, ponieważ mogę wywoływać to opakowanie z innych programów. Np. W vimie, ustawiając vimgrep, dzięki czemu moje wyszukiwania w vimie zachowują się identycznie jak wyszukiwania w wierszu poleceń.
$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*
Wywołaj to, używając:
$ grp pattern dir
na przykład
$ grp pattern .
wyszuka wystąpienia „wzorca” we wszystkich plikach tekstowych w bieżącym katalogu i podkatalogach.
Zauważ, że nazywam mój skrypt „grp”, a nie cieniowanie „grep”, dzięki czemu zawsze mam świadomość, czy wywołuję grep z moimi niestandardowymi ustawieniami domyślnymi.
Domyślnie dołączam:
-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files
Myślę, że każdy chciałby pominąć katalog kontroli źródła: .hg .git .bzr .svn
Pomijanie „build” i „dist” to Python-isms i prawdopodobnie nie dotyczy większości ludzi. Bez wątpienia w trakcie pracy rozwiniesz swoje osobliwości.
„tags” to wynik ctagów, których używam do „przejdź do definicji funkcji” i tym podobnych w narzędziach takich jak vim. Jako taki zawiera co najmniej jedną kopię każdego słowa i symbolu z mojego kodu źródłowego, dlatego warto pomijać wyniki wyszukiwania.
„$ *” na końcu to składnia bash dla „i wszystkich innych parametrów z wiersza poleceń”, więc możesz przekazać wzorzec i katalog, aby szukać normalnie, i przesłonić wszelkie inne flagi linii poleceń .
--color
Opcja została już wspomniano kilka razy, ale chciałbym dodać, że jest to możliwe, aby zmienić kolor, w których mecze będą podświetlone za pomocą zmiennej środowiskowej
export GREP_COLOR="1;33"
Kolor należy zakodować za pomocą kodów kolorów ANSI, w celach informacyjnych
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
GREP_COLOR
jest przestarzałe. Użyj GREP_COLORS
zamiast tego.
Ponieważ nie widziałem żadnych przykładów ustawiania kolorów, oto prosta konfiguracja GNU grep:
# turn on colors, natch.
export GREP_OPTIONS="--color=auto"
if [[ $(echotc Co) -ge 256 ]]; then
# 256 color terminals
export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
# everybody else
export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi
Uważaj na GREP_OPTIONS
; nie używaj go do niczego innego niż coś takiego --color=auto
, bo może to zepsuć wszystkie skrypty, które używają grep w twoim systemie.