Dostosowanie grep-a do SVN i Symfony
Jednym z nieocenionych narzędzi podczas programowania jest grep, który (jakby ktoś nie wiedział) służy do wyszukiwania treści w plikach tekstowych.
Jednak, jak każde narzędzie, warto go dostosować do własnych potrzeb. Ja najczęściej stosuję go do przeszukiwania projektów będących pod kontrolą Subversion (SVN), poprzez taką instrukcję:
grep -RIin "szukane" * --exclude-dir=\.svn
Dla wyjaśnienia: -R — szukanie rekursywne w podkatalogach, -I — pomijanie plików binarnych, -i — niewrażliwość na wielkość znaków, -n — wyświetlenie nr linii w wyniku.
Oczywiście wpisywanie tego za każdym razem nie ma nic wspólnego z wygodą, dlatego warto sobie utworzyć funkcję dla powłoki np. w pliku .profile (średniki na końcu są wymagana dla Basha, Zsh ich nie potrzebuje):
function g { grep -RIn $1 * --exclude-dir=\.svn ; }function gi { grep -RIin $1 * --exclude-dir=\.svn ; }
Dzięki czemu wystarczy wykonać:
[src]> g fuck
arch/i386/kernel/cpu/cpufreq/powernow-k7.c:558: * Some Athlon laptops have really fucked PST tables.
arch/i386/kernel/cpu/mtrr/generic.c:70:/* Some BIOS's are fucked and don't set all MTRRs the same! */
…
Z racji tego, że większość projektów piszę w Symfony, stworzyłem sobie dodatkową wersję tej funkcji:
function sfg { grep -RIn $1 lib/model apps/ --exclude-dir=\.svn ; }
Odpalając ją w głównym katalogu projektu, można łatwo przeszukać wszystkie warstwy aplikacji (model, widoki, kontrolery i przy okazji parę innych).
Jest też możliwość włączenia „na stałe” niektórych opcji, poprzez wyeksportowanie zmiennej środowiskowej o nazwie GREP_OPTIONS, np.:
export GREP_OPTIONS="--exclude-dir=\.svn"
Ale ja osobiście tego nie stosuję.