Rekurencyjne wyszukiwanie tekstu z wzorami grep i plików


46

Biorąc pod uwagę tę przykładową strukturę folderów:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

Jak przeprowadzić rekursywne wyszukiwanie tekstu we wszystkich *.txtplikach z grep„/”?

( "grep -r <pattern> *.txt"kończy się niepowodzeniem po uruchomieniu z „/”, ponieważ .txtw tym folderze nie ma żadnych plików).

Odpowiedzi:


61

Moja wersja GNU Grep ma przełącznik do tego:

grep -R --include='*.txt' $Pattern

Opisane w następujący sposób:

--include=GLOB

Przeszukuj tylko pliki, których podstawowa nazwa pasuje do GLOB (używając dopasowywania symboli wieloznacznych, jak opisano w --exclude).


19

Jeśli masz dużą liczbę plików, warto włączyć xargs do polecenia, aby uniknąć błędu „zbyt długiej listy argumentów”.

find . -name '*.txt' -print | xargs grep <pattern>

6
Jeśli w nazwach plików lub katalogów są spacje, użyj tego formularza: znajdź. -nazwa „* .txt” -print0 | xargs -0 grep <pattern>
Jason Luther

2
I oczywiście jest kwestia nazw plików, które zaczynają się od -.
TJ Crowder

grepjest szybszy od find.
Nabi KAZ



0
find . -name '*.txt' -type f -exec grep <pattern> {} \;

możesz zamiast tego użyć polecenia „znajdź. -nazwa * * .txt” -type f -exec grep <pattern> {} + ”, aby zachowywał się podobnie do wersji Mark Robinson - działa tylko z GNU find według mojej wiedzy
serverhorror

0

Odpowiedź Mannisa rozwinęłaby nowy proces grep dla każdego pliku tekstowego. Jeśli masz tam wiele plików tekstowych, możesz rozważyć grepowanie każdego pliku i wybranie plików .txt, gdy to zrobisz:

grep -r <pattern> * | grep \.txt:

To wymaga więcej miejsca na dysku, ale i tak może być szybsze.


0

Jest rok 2019 i nie ma mowy, żebym nadal używał grep do rekurencyjnego wyszukiwania tekstu.

Dzisiejsze odpowiedzi IMHO powinny obejmować ripgrep :

rg <pattern> -ttxt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.