2013-03-25 14 views
166

Jak grep ciąg lub tekst w katalogu i wszystkich jego podkatalogów w LINUX?Jak grep ciąg w katalogu i wszystkie jego pliki podkatalogów w LINUX?

+1

Czy zamierzasz przekazać informacje zwrotne na temat napotkanych problemów z 'grep -r' lub' grep -R'? Czy sprawdziłeś stronę podręcznika 'grep' na swoim komputerze? Czy pamiętałeś o zamknięciu wyrażenia regularnego (łańcucha lub tekstu) w cudzysłowie, jeśli zawiera ono metaznaki? –

Odpowiedz

326

Jeśli grep obsługuje -R, zrobić:

grep -R 'string' dir/ 

Jeśli nie, użyj find:

find dir/ -type f -exec grep -H 'string' {} + 
+3

Czy możesz również wyjaśnić, jak działa druga odpowiedź? – tranquil

+1

Wyszukaj, używając 'find', w katalogu' dir/'dla zwykłych plików i uruchom' grep -H 'string'' na każdym z tych plików. – markzz

+0

Zobacz odpowiedź poniżej. Jeśli '-R' nie działa, spróbuj również' -r'. –

38
grep -r -e string directory 

-r jest rekurencyjny; -e jest opcjonalny, ale jego argument określa wyrażenie regularne do wyszukania. Co ciekawe, POSIX grep nie jest wymagane do obsługi -r (lub -R), ale jestem pewny, że System V grep zrobił tak, więc w praktyce (prawie) wszyscy to robią. Niektóre wersje grep obsługują -R jak również (lub ewentualnie zamiast) -r; AFAICT, to znaczy to samo.

+0

Jestem prawie pewien, że grep SVR3.2 i SVR4 nie, ponieważ pracowałem nad rozwojem systemu operacyjnego dla produktów SYSV w tym czasie, i miałem skrypt powłoki rgrep, aby go zawijać w tym czasie. Nie mam już więcej do przetestowania. –

+0

@RandyHoward: Dzięki! SVR3.2 i SVR4.0 są wystarczająco staranne, nie dziwi mnie, że moja pamięć jest wadliwa. –

+1

'-R' podąża za dowiązaniami symbolicznymi, które możesz, ale nie chcesz, aby –