grep 및 파일 패턴으로 재귀 텍스트 검색


46

이 예제 폴더 구조는 다음과 같습니다.

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

"/"에서 모든 *.txt파일 에 대해 재귀 텍스트 검색을 수행하려면 어떻게합니까 grep?

( "grep -r <pattern> *.txt"전혀 없기 때문에, "/"에서 실행할 때 실패 .txt해당 폴더의 파일이.)

답변:


61

내 GNU Grep 버전에는 다음과 같은 스위치가 있습니다.

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

다음과 같이 설명됩니다 :

--include=GLOB

기본 이름이 GLOB와 일치하는 파일 만 검색합니다 (--exclude에 설명 된대로 와일드 카드 일치 사용).


19

파일 수가 많은 경우 'argument list too long'오류를 피하기 위해 xargs를 명령에 포함시키는 것이 유용합니다.

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

6
파일 또는 디렉토리 이름에 공백이 있으면 find 양식을 사용하십시오. -name '* .txt'-print0 | xargs -0 grep <pattern>
Jason Luther

2
물론로 시작하는 파일 이름 문제가 -있습니다.
TJ Crowder 2019

grep보다 빠릅니다 find.
Nabi KAZ

2

당신은 당신 zshEXTENDED_GLOB옵션 을 사용할 수 있습니다 ( 문서 )

grep <pattern> **/*.txt

OP가 zsh를 사용하지만 그럼에도 불구하고 흥미있는 경우에만.
Law29


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

대신 "find. -name '* .txt'-type f -exec grep <pattern> {} +"를 사용하여 Mark Robinson과 비슷한 방식으로 동작하도록 할 수 있습니다. GNU find에서만 작동합니다.
serverhorror 2016 년

0

Mannis의 답변은 모든 텍스트 파일에 대해 새로운 grep 프로세스를 포크합니다. 당신이 경우 많은 이 textfiles의를 먼저 모든 파일을 grepping 고려해 볼 수 있습니다 그리고 그게 전부가 완료되면 .txt 인-파일을 선택합니다 :

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

디스크를 많이 사용하지만 어쨌든 더 빠를 수 있습니다.


0

2019 년이며 재귀 텍스트 검색에 grep을 계속 사용할 방법이 없습니다.

IMHO 오늘의 답변에는 ripgrep 이 포함 되어야합니다 .

rg <pattern> -ttxt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.