2012-05-17 17 views
12

Mam katalog o nazwie XYZ, który ma katalogi ABC, DEF, GHI wewnątrz niego. Chcę wyszukać wzór "writeText" we wszystkich * .c we wszystkich katalogach (np. XYZ, XYZ/ABC, XYZ/DEF i XYZ/GHI). Jakiej komendy grep mogę użyć?grep we wszystkich katalogach

Również jeśli chcę szukać tylko w XYZ, XYZ/ABC, XYZ/GHI, a nie XYZ/DEF, jakie polecenie grep mogę użyć?

Dziękujemy!

+1

Flagi '--recursive' i' --include'/'--exclude' są prawdopodobnie tym, czego potrzebujesz: – geoffspear

Odpowiedz

24
grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ 
  • -R oznacza rekurencyjne, więc będzie iść do podkatalogów katalogu jesteś przegrepować
  • --include="*.c" oznacza „szukać plików kończących się .c
  • --exclude-dir={DEF} oznacza „wykluczenia katalogów o nazwie DEF. Aby wykluczyć wiele katalogów, wykonaj następujące czynności: --exclude-dir={DEF,GBA,XYZ}
  • writeFile to wzór, w którym się znajdujesz:
  • /path/to/XYZ to ścieżka do katalogu, w którym chcesz przeglądać.

Pamiętaj, że te flagi mają zastosowanie do GNU grep, mogą być inne, jeśli używasz BSD/SysV/AIX grep. Jeśli używasz grep utils Linux/GNU, powinieneś być w porządku.

+0

Dziękuję. To działa! – Romonov

3

Możesz użyć poniższego polecenia, aby odpowiedzieć przynajmniej na pierwszą część pytania.

find . -name *.c | xargs grep "writeText" 
+1

, aby uzyskać tę wiadomość: find. -name * .c | xargs grep "writeText" find: ścieżki muszą poprzedzać wyrażenie Użycie: find [ścieżka ...] [wyrażenie] – Romonov

+0

Pracuję na moim komputerze z Ubuntu. Czy możesz spróbować użyć opcji znajdź. -name * .c i udostępnij wynik. –

+0

Ta sama wiadomość. Mój system to redhat. – Romonov

-1

To zadziałało dla mnie. Zmodyfikowałem trochę dla moich potrzeb. Używam Macintosh OSX 10.8.3 z aplikacji Terminal.

Zamiast "* .c" użyłem "util" - jest to część każdej nazwy pliku, którą chciałem przeszukać spośród wielu innych plików znajdujących się w tym katalogu.

W mojej sytuacji nie potrzebowałem "--exclude-dir", ponieważ przeszukiwałem wszystkie podkatalogi znajdujące się pod moją bieżącą lokalizacją.

W pliku writeFile użyłem (z cudzysłowami) "utilization =" lub "request", które były dwoma ciągami, które chciałem znaleźć w pliku (ach).

Potem użyłem "." aby wskazać, że chcę rozpocząć wyszukiwanie w bieżącym katalogu.

Następnie używam> /[path]/[nazwa_pliku.txt], aby wskazać, że chcę, aby wszystkie dane wyjściowe zostały dodane do pliku tekstowego.

Dziękuję.

Powiązane problemy