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).
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 .
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).
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" .
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.
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.
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
-
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
-
grep -rE "yourstring|yourotherstring|$" *
wyszukuje miejsca na liście, w którychyourstring
lubyourotherstring
pasuje
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 {}").
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' *
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.
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.
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" .
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