sobota, 23 stycznia 2010

Wyszukiwanie tekstu w plikach za pomocą konsoli

Stanąwszy dzisiaj w obliczu potrzeby wyszukania pewnego tekstu w plikach tekstowych, które znajdują się w biężącym katalogu lub w którymś z jego podkatalogów poszperałem trochę w pomocy i wynalazłem taką kombinację:
cat $(find . -name "*.txt" -print) | grep -H -i tekst
Od początku:
find . -name "*.txt" -print - wyszukuje wszystkie pliki w katalogu bieżacym (.) lub głębiej o nazwie pasującej do *.txt i wyświetla na ekranie (-print)
$(find . -name "*.txt" -print) - otoczenie nawiasami ochronnymi aby wynik find "wkleił" się jako argument polecenia cat. Taki sam efekt można uzyskać przy pomocy otoczenia ` ` (znak nad tabem).
cat $(find . -name "*.txt" -print) - wypisuje zawartość plików podanych przez find
cat $(find . -name "*.txt" -print) | grep -H -i tekst - wyjście cat jest podawane do grepa, który wyszukuje w nim tekstu "tekst" będąc niewrażliwym na wielkość liter (-i) oraz dodając nazwę pliku dla każdej linii w której znajduje się trafienie (-H).