특정 콘텐츠가 포함된 .txt 파일을 나열하는 방법은 무엇입니까?

특정 콘텐츠가 포함된 .txt 파일을 나열하는 방법은 무엇입니까?

"Ubuntu"라는 단어가 포함된 전체 경로와 함께 모든 .txt 파일을 나열하는 방법. 텍스트가 아닌 파일은 무시됩니다. 값을 비교할 때 대소문자를 무시해야 합니다. 즉, UBUNTU, ubuNtu 또는 UbUnTu는 지정된 검색 구문과 동일한 것으로 간주됩니다.

답변1

GNU grep은 glob 패턴을 기반으로 한 재귀 검색을 지원합니다. 예를 들면 다음과 같습니다.

grep --include='*.txt' -ril ubuntu /path/to/dir

정규식을 검색하지 않는 경우 -F고정 문자열 일치( )를 포함하면 이 프로세스가 훨씬 더 빨라집니다. 또 다른 최적화는 -i필요하지 않은 경우 무시( )를 제거하는 것입니다 .

답변2

단순한find+grep해결책:

find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;

grep세부 사항:

  • l- 대신 일반 출력을 억제합니다. print는 일반적으로 각 입력 파일의 이름을 인쇄합니다.
  • i- 대소문자만 다른 문자가 서로 일치하도록 대소문자 차이를 무시합니다.

답변3

이 유틸리티의 일부 구현에는 바이너리를 무시 하는 플래그가 grep있습니다 . 정규식 대신 대소문자를 구분하지 않는 일치 및 고정 문자열에 대한 일치를 사용할 수도 있습니다 . 따로 찾고 계시다면-Igrep-i-F성격-w일부 구현에 있는 기능을 사용해야 합니다 grep. 그런 다음 하위 디렉터리로 재귀적으로 이동하려면 재귀를 사용하여 -R파일을 검색하고 -l패턴 일치가 포함된 파일 이름을 가져올 수 있습니다. 그런 다음 특정 확장자를 가진 파일만 볼 수 있는 --includeGNU가 있는 경우 이를 사용하고 싶습니다 .grep

grep -Fil -IRw --include='*.txt' 'ubuntu' /path/to/top/dir

사용된 표준 옵션: -F, -i, -l.

사용된 비표준 옵션( grep일부 구현에서 지원됨): -w, -I, -R, --include.


가 없는 findOpenBSD를 대신 사용 합니다 (GNU 에도 이 플래그가 있습니다).grep--include--binary-files-Igrep

find /path/to/top/dir -type f -name '*.txt' \
    -exec grep -Fil -w --binary-files=without-match 'ubuntu' {} +

답변4

이것이 내가 일반적으로 사용하는 것입니다:

find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;

관련 정보