Jak mogę użyć grepa, aby znaleźć słowo w folderze?

W systemie Windows szukałbym słowa w folderze. Podobnie, chcę wiedzieć, czy konkretne słowo występuje w katalogu zawierającym wiele podkatalogów i plików. Moje wyszukiwanie składni grepa pokazuje, że muszę podać nazwę pliku, tzn. grep string filename.

Teraz nie znam nazwy pliku, więc co mam zrobić? Znajomy zasugerował zrobienie grep -nr string, ale nie wiem co to znaczy i nie mam z tym żadnych rezultatów (nie ma odpowiedzi dopóki nie wystawię ctrl + c).

 405
Author: MackM, 2010-11-08

11 answers

grep -nr 'yourString*' .

Kropka na końcu przeszukuje bieżący katalog. Znaczenie dla każdego parametru:

-n            Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r            Recursively search subdirectories listed
.             Directory for search (current directory)

grep -nr 'MobileAppSer*' . (znajdzie MobileAppServlet.java lub MobileAppServlet.class lub MobileAppServlet.txt; 'MobileAppASer*.*' to inny sposób na zrobienie tego samego.)

Aby sprawdzić więcej parametrów użyj polecenia man grep .

 602
Author: Manish Ranjan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-13 20:30:13

grep -nr string my_directory

Uwagi dodatkowe: jest to zgodne ze składnią grep [options] string filename, ponieważ w systemach uniksopodobnych katalog jest rodzajem pliku (istnieje termin "plik zwykły" odnoszący się konkretnie do encji, które są nazywane po prostu "plikami" w systemie Windows).

grep -nr string czyta zawartość do przeszukiwania ze standardowego wejścia, dlatego po prostu czeka tam na wejście od Ciebie i przestaje to robić po naciśnięciu ^C (zatrzyma się również na ^D, co jest kombinacją klawiszy końca pliku).

 99
Author: usta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-08 07:05:58

GREP : Globalne Wyrażenie regularne Print / Parser / procesor / Program.
Możesz użyć tego do przeszukiwania bieżącego katalogu.
Możesz podać-R dla "rekurencyjnego", co oznacza, że program przeszukuje wszystkie podfoldery, ich podfoldery, ich podfoldery itp.

grep -R "your word" .

-n wyświetli numer linii, w którym pasował w pliku.
-i przeszukuje wielkość liter bez rozróżnienia (duże / małe litery).

grep -inR "your regex pattern" .
 50
Author: Stefan Steiger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 11:51:15

Jest też:

find directory_name -type f -print0 | xargs -0 grep -li word

Ale To może być trochę dużo dla początkującego.

find jest katalogiem ogólnego przeznaczenia walker / lister, -type f oznacza "Szukaj zwykłych plików zamiast katalogów i nazwanych rur i co masz", -print0 oznacza "wydrukuj je na standardowym wyjściu używając znaków null jako ograniczników". Wyjście z find jest wysyłane do xargs -0, które przechwytuje standardowe wejście w kawałkach (aby uniknąć ograniczeń długości wiersza poleceń), używając znaków null jako rekordu separator (zamiast standardowego znaku nowej linii) i stosuje grep -li word do każdego zestawu plików. Na grep, -l oznacza "listę plików, które pasują", a -i oznacza "niewrażliwe na wielkość liter"; zazwyczaj można łączyć opcje pojedynczego znaku, więc zobaczysz -li częściej niż -l -i.

Jeśli nie używasz -print0 i -0, napotkasz problemy z nazwami plików, które zawierają spacje, więc używanie ich jest dobrym nawykiem.

 24
Author: mu is too short,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-08 07:40:26
grep -nr search_string search_dir

Wykona rekursywne (tzn. katalog i wszystkie jego podkatalogi) wyszukiwanie search_string. (jak poprawnie odpowiedział usta).

Powód, dla którego nie otrzymałeś żadnych anwers z sugestią przyjaciela:

grep -nr string

Ponieważ nie podano żadnego katalogu. Jeśli znajdujesz się w katalogu, w którym chcesz wyszukać, musisz wykonać następujące czynności:

grep -nr string .

Ważne jest, aby uwzględnić".'znak, jak to mówi grepowi, aby przeszukał to katalog.

 22
Author: Nico Huysamen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-08 06:59:08
  1. grep -r "yourstring" * Znajdzie "yourstring" w dowolnych plikach i folderach

Teraz, jeśli chcesz szukać dwóch różnych ciągów jednocześnie, zawsze możesz użyć opcji E i dodać słowa do wyszukiwania. przykład po przerwie

  1. grep -rE "yourstring|yourotherstring|$" * wyszukuje miejsca na liście, w których yourstring lub yourotherstring pasuje
 4
Author: Nwaoga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-25 15:10:28

Kolejna opcja, którą lubię używać:

find folder_name -type f -exec grep your_text  {} \;

- typ f zwraca tylko pliki, a nie foldery

- exec i {} uruchamia grep na plikach znalezionych podczas wyszukiwania(dokładna składnia to " - Exec command {}").

 3
Author: jfhfhf839,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-03 14:46:11

Dlaczego nie wykonać rekurencyjnego wyszukiwania, aby znaleźć wszystkie instancje w podkatalogach:

grep -r 'text' *

To działa jak urok.
 3
Author: Paxwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 06:46:04

Wybrana przez Ciebie Odpowiedź jest w porządku i działa, ale nie jest to prawidłowy sposób, ponieważ:

grep -nr yourString* .

To rzeczywiście przeszukuje ciąg "yourStrin" i "g" 0 lub wiele razy.

Więc właściwym sposobem na to jest:

grep -nr \w*yourString\w* .

To polecenie przeszukuje ciąg znaków przed i po w bieżącym folderze.

 1
Author: eLRuLL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-11 04:32:57

Nie używaj grepa. Pobierz Silver Searcher lub ripgrep . Oba są znakomite i znacznie szybsze niż grep lub ack z mnóstwem opcji.

 1
Author: AAAfarmclub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 02:08:20

Podobnie jak w odpowiedzi zamieszczonej przez @ eLRuLL, łatwiejszym sposobem określenia wyszukiwania, które respektuje granice słów, jest użycie opcji -w:

grep -wnr "yourString" .
 0
Author: Mike Slinn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 17:22:52