programing

Linux에서 특정 텍스트(문자열)가 포함된 모든 파일을 찾는 방법

showcode 2023. 4. 10. 22:27
반응형

Linux에서 특정 텍스트(문자열)가 포함된 모든 파일을 찾는 방법

파일 내용 내에 특정 문자열이 포함된 모든 파일을 찾으려면 어떻게 해야 합니까?

다음 항목은 작동하지 않습니다.시스템 내의 모든 파일이 표시되는 것 같습니다.

find / -type f -exec grep -H 'text-to-find-here' {} \;

다음을 수행합니다.

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r ★★★★★★★★★★★★★★★★★」-R
  • -n 줄넘버, 줄넘버.
  • -w이치노
  • -l(소문자 L)을 추가하여 일치하는 파일의 파일 이름만 지정할 수 있습니다.
  • -e 중에 입니다.

함께, 것 along along along along along along 。--exclude,--include,--exclude-dir플래그를 사용하여 효율적으로 검색할 수 있습니다.

  • 확장자가 .c 또는 .h인 파일만 검색합니다.

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • 확장자 .o로 끝나는 모든 파일 검색은 제외됩니다.

    grep --exclude=\*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • 의 경우, 이상의 할 수 --exclude-dir파라미터를 지정합니다.를 들어됩니다.dir1/,dir2/ 일치하고 있습니다.*.dst/:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/search/' -e "pattern"
    

자네와 거의 같은 목적을 달성하려면 이 방법이 내게는 매우 효과적이야.

옵션의 상세한 것에 대하여는, 을 참조해 주세요.

grep -ilR:

grep -Ril "text-to-find-here" /
  • i대소문자를 무시하다
  • R재귀.재귀.재귀.재귀.재귀.재귀.
  • l는 ""를 의미합니다.
  • /는 머신의 루트에서 시작하는 것을 의미합니다.

ack을 사용할 수 있습니다.소스 코드의 grep와 같습니다.이것으로 파일 시스템 전체를 스캔 할 수 있습니다.

다음 작업을 수행합니다.

ack 'text-to-find-here'

루트 디렉토리에 있습니다.

정규 표현식을 사용하거나 파일 형식을 지정할 수도 있습니다.


갱신하다

'실버 서처'를 발견했는데, '악'과 비슷하지만 그보다 3~5배 빠르고 심지어 '실버 서처'의 패턴도 무시합니다..gitignorefilename을 클릭합니다.

다음을 사용할 수 있습니다.

grep -r "string to be searched"  /path/to/dir

r 서브디렉토리를 합니다.recursive는 recursive입니다.파일명과 문자열이 표시되는 파일의 행을 인쇄합니다.

또는 모든 javascript 파일(*.js)을 검색하기 위해 사용하는 명령어(예: )와 유사한 명령어를 사용할 수도 있습니다.

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

이렇게 하면 텍스트가 표시되는 파일의 행이 인쇄되지만 파일 이름은 인쇄되지 않습니다.

이 명령어와 더불어 grep - rn "String to search" /path/to/directory/or/file -r: recursive search n: 일치하는 행 번호가 표시됩니다.

회선번호가 있는 재귀 및 대소문자를 구분하지 않는 GREP:

grep -inr "Text" folder/to/be/searched/

grep (GNU 또는 BSD)

하시면 됩니다.grep다음과 같이 현재 폴더를 재귀적으로 검색하는 도구입니다.

grep -r "class foo" .

★★★★★★-r - 서브디렉토리를 재귀적으로 검색합니다.

globing 구문을 사용하여 다음과 같은 특정 파일 내에서 검색할 수도 있습니다.

grep "class foo" **/*.c

주의: Globing 옵션 사용(**특정 확장자 또는 패턴을 가진 모든 파일을 재귀적으로 검색합니다.이 구문을 이노블로 만들려면: 를 실행합니다.를 사용할 수도 있습니다.**/*.*모든 파일(숨겨진 파일 및 확장자 제외) 또는 기타 패턴에 적용됩니다.

검색 를 사용하십시오.find하다

find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'

또는 를 사용합니다.

ripgrep

큰는, 을 사용해 주세요ripgrep신음음하다

rg "class foo" .

GitHub 프로젝트 페이지에서 문서, 설치 단계 또는 소스 코드를 확인합니다.

유한 오토마타, SIMD 및 공격적인 리터럴 최적화를 사용하여 검색을 매우 빠르게 하는 Rust의 regex 엔진 위에 구축되었기 때문에 GNU/BSD , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 같은 다른 어떤 보다 훨씬 더 빠릅니다.

ignore 패턴에 ..gitignore하나의 파일 경로를 여러 글로벌 패턴과 동시에 일치시킬 수 있습니다.


다음과 같은 일반적인 파라미터를 사용할 수 있습니다.

  • -i한 검색 - 무신경한 검색. - 무신경한 검색.
  • -I해 주세요 - 바이너리 파일은 무시해 주세요.
  • -w- 전체 단어를 검색합니다(부분 단어 일치와 반대).
  • -n을 보여 . - 짝짓기 선을 보여 주세요. - 짝짓기 선을 보여 주세요.
  • -C/--context-C5 - 코드가 - 네, 주변 코드가 표시됩니다.
  • --color=auto하는 텍스트를 표시해 - 일치하다.
  • -H를 찾을 수을 표시합니다 - 검색 결과 파일 이름.
  • -c행의 합니다.- lines일 、 - 、 일 、 - 、 - 、와와 can with with with with with with with 할 수 -H.

지정된 텍스트를 포함하는 파일 이름 목록

우선, 나는 네가 이 모든 것을-H-l 따옴표 에 그 에 '따옴표'를 해 볼 {} \.

find / -type f -exec grep -l "text-to-find-here" {} \; 

디렉토리내에서 특정의 텍스트 「Apache License(라이선스 첨부)」를 포함한 파일을 검색한다고 합니다.다음과 같은 결과가 표시됩니다(디렉토리 내용에 따라 출력이 다릅니다).

bash-4.1$ find . -type f -exec grep -l "Apache License" {} \; 
./net/java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$ 

대소문자를 구분하지 않음

'와 와 같은 '텍스트'를 할 수 .-i대소문자를 무시하도록 전환합니다.자세한 내용은 여기를 참조하십시오.

이 grep 명령어는 Linux에서 특정 텍스트를 검색할 때 정확한 결과를 제공합니다.

grep -inRsH "Text to be searched" /path/to/dir (it can be '.')

  • i하지 않는 case differentions의 입니다.

  • R도 포함됩니다.'r'r'r'r'r'r'r'r'r'r'r'R'R'R'R'R'R'R'R'RR'R'R'R'R'R'RR'

  • n" "Twill print line number" 。

  • s' 메시지 삭제'는 ' 메시지삭제'의입니다.

  • H각합니다」의입니다.

의 '' ''가grep검색을 .재귀 검색을 조합할 수 .findxargs:

find / -type f | xargs grep 'text-to-find-here'

생각합니다.find -exec.

일치하는 행의 파일명과 내용을 출력합니다.

/home/rob/file:text-to-find-here

할 수 grep:

  • -i를 구분하지 않는 - 대소문자를 구분하지 않는 검색
  • -l합니다. - 일치가 발견된 파일 이름입니다.
  • -h행만 출력합니다. - .- )) the(((((((((((((((((((( - - - - - - - - - 。
grep -insr "pattern" *
  • i: 파일 : PATANGE는 대소문자를 구분하지 않습니다.
  • n: 각의 1 의 행 출력의 각 행에 입력 파일내의 1 베이스의 행 번호를 부가합니다.
  • s: 하지 않거나 수 파일에 대한 존재하지 않거나 읽을 수 없는 파일에 대한 오류 메시지를 표시하지 않습니다.
  • r: 각 디렉토리의 모든 파일을 재귀적으로 읽습니다.

Silversearcher라는 새로운 유틸리티가 있습니다.

sudo apt install silversearcher-ag

Git 및 기타 VCS와 긴밀하게 연동됩니다.따라서 .git이나 다른 디렉토리에서는 아무것도 얻을 수 없습니다.

간단하게 사용할 수 있습니다.

ag "Search query"

그리고 그것은 당신을 위해 일을 할 것입니다!

Linux에서 특정 텍스트를 포함하는 모든 파일을 찾으려면 어떻게 해야 합니까? (...)

저는 이 솔루션을 두 번 접했습니다.

find / -type f -exec grep -H 'text-to-find-here' {} \;


예시와 같이 find를 사용하는 경우,-s )--no-messages부터 )까지grep , , , , 입니다.2>/dev/null명령어 마지막에 명령어가 발행되는 많은 권한 거부 메시지를 회피합니다.grep ★★★★★★★★★★★★★★★★★」find:

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

find는 Unix와 같은 플랫폼에서 특정 텍스트를 검색할 때 grep와 조합하여 파일을 검색하기 위한 표준 도구입니다.참고로 find 명령어xargs와 조합되는 경우가 많습니다.

동일한 목적을 위해 더 빠르고 쉬운 도구가 존재합니다. 아래를 참조하십시오.물론 플랫폼에서 사용할 수 있다면 사용해 보는 것이 좋습니다.

더 빠르고 쉬운 대안

RipGrep - 가장 빠른 검색 도구:

rg 'text-to-find-here' / -l

실버 서커:

ag 'text-to-find-here' / -l

ack:

ack 'text-to-find-here' / -l

주의: 추가할 수 있습니다.2>/dev/null이러한 명령어에 대해서도, 많은 에러 메시지를 숨깁니다.


경고: 정말로 피할 없는 경우가 아니라면 길고 비효율적인 검색을 피하기 위해 '/'(루트 디렉터리)에서 검색하지 마십시오. 따라서 위의 예에서는 실제로 검색할 위치에 따라 "/home"과 같은 하위 디렉터리 이름으로 '/'을 대체하는 것이 좋습니다.

pwd

grep -rnw `pwd` -e "pattern"

하고 있는, 「GREP」를 생략할 수 .pwd .디렉토리가 지정되지 않은 경우 grep의 기본 케이스로 간주됩니다.

다음과 같이 됩니다.

grep -rnw -e "pattern"

또는

grep -rnw "pattern"

위와 같은 작업을 수행합니다.

시험:

find . -name "*.txt" | xargs grep -i "text_pattern"
grep -lrnw '/root/Desktop/ipozal' -e 'geolocation'

예를 들어 다음과 같습니다.

  • 내 폴더 이름은 "ipozal"입니다.
  • "/root/데스크탑"에 배치되어 있습니다.
  • 이 텍스트를 "Geolocation"에 있는 모든 파일에서 찾습니다.

grep을 사용하다

단순히 실행하기만 하면,

grep -RIl "" .

모든 텍스트 파일(인쇄 가능한 문자만 포함)에 대한 경로를 인쇄합니다.

꼭 사용하시려면find으로 ' '를 사용합니다.find + grep:

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

순서:

  1. find, 파일 검색,
  2. ★★grep전부 다요.

이이 of of of of of of of of of of of of of of of of of of of 의 힘을 얻을 수 있습니다.find파일을 검색합니다.

  • -name Patterngrep「이것들」은 다음과 같습니다.

find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;

여러 가지 을 사용할 수 있습니다.find파일 검색을 개선합니다.

Silver Searcher는 훌륭한 도구이지만 ripgrep은 더 나을 수 있습니다.

Linux, Mac, Windows에서 동작하며, 몇 달 전에 해커 뉴스에서 작성되었습니다(이것은 GitHub 링크가 있는 Andrew Gallant의 블로그에 링크되어 있습니다).

Ripgrep – 새로운 명령줄 검색 도구

다음은 파일 검색에 사용할 수 있는 몇 가지 명령어 목록입니다.

grep "text string to search” directory-path

grep [option] "text string to search” directory-path

grep -r "text string to search” directory-path

grep -r -H "text string to search” directory-path

egrep -R "word-1|word-2” directory-path

egrep -w -R "word-1|word-2” directory-path

Git 저장소에 있는 경우 다음을 사용할 수 있습니다.

git grep something

grep이 rl로 간단하게 만드는 것에 매료되었습니다.

grep -rl 'pattern_to_find' /path/where/to/find

-r to recursively find a file / directory inside directories..
-l to list files matching the 'pattern'

'l' 없이 '-r'을 사용하면 파일 이름 뒤에 패턴이 발견된 텍스트를 볼 수 있습니다.

grep -r 'pattern_to_find' /path/where/to/find

정말 완벽하게 작동하는데...

grep "text-to-find-here" file_name

또는

grep "text-to-find-here" directory_path/*

현재 디렉토리를 검색하는 경우:

grep "text-to-find-here" *

원하는 대로 동작하는 ACK 툴이 있습니다.

ack -i search_string folder_path/*

해도 -i대소문자를 구분하여 검색합니다.

이게 도움이 됐으면 좋겠는데...

grep★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★♪ 예를 들어, 다음과 같이 텍스트가 실행되는 파일의 줄 번호를 얻을 수 있습니다.

find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

, 파일 있는 타입의 범위를 수 있습니다.이 경우는, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」.pas ★★★.dfm 삭제:

find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"

옵션에 대한 간단한 설명:

  1. . find는, 의 directorydirectory 에서 합니다.
  2. -name*.*" : " : " ) *.pas - o -name " -o - name "*.dfm ) : " " 만 : 。*.pas ★★★*.dfm 「」, 「」로 된 파일-o
  3. -type f는, 을 찾고 을 지정합니다.
  4. -print0 ★★★★★★★★★★★★★★★★★」--null|(는 중요한 (파이프)의 을 (파이프)의 것으로 findgrepxargs파일명에 공백이 있는 파일명을 전달할 수 있기 때문에 경로와 파일명을 1개의 문자열로 취급할 수 있으며 각 공간에서 분할할 수 없습니다.
find /path -type f -exec grep -l "string" {} \;

코멘트에서 설명

find는 특정 경로의 서브디렉토리 내에 있는 파일 및 기타 오브젝트(디렉토리 및 링크 등)를 검색할 수 있는 명령어입니다.파일 이름이 충족해야 하는 마스크를 지정하지 않으면 모든 디렉토리 개체가 열거됩니다.

-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename

시험:

find / -type f -exec grep -H 'text-to-find-here' {} \;

시스템을 합니다./ folderroot 입니다.

홈 폴더 사용:

find ~/ -type f -exec grep -H 'text-to-find-here' {} \;

현재 폴더 사용:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;

단순한 A 심find can work handy. alias it in your 유용하게 쓰일 수 있습니다.~/.bashrc 삭제:

alias ffind find / -type f | xargs grep

새 터미널을 시작하여 다음 문제를 발생시킵니다.

ffind 'text-to-find-here'

grep은 이를 달성하기 위한 당신의 좋은 친구입니다.

grep -r <text_fo_find> <directory>

검색할 텍스트의 대소문자를 신경 쓰지 않는 경우 다음을 사용하십시오.

grep -ir <text_to_find> <directory>

문자열을 검색하고 검색 문자열을 사용하여 해당 행만 출력하려면 다음 절차를 수행합니다.

for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done

예:

for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done

검색 문자열을 포함하는 파일 이름을 표시하려면:

for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;

예:

for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;

비슷한 작업을 하는 Python 스크립트를 작성했습니다.이 스크립트를 사용하는 방법은 다음과 같습니다.

./sniff.py path pattern_to_search [file_pattern]

The first argument, 첫 번째 논쟁은path, , is the directory in which we will search recursively.는, 재귀적으로 검색하는 디렉토리입니다. The second argument, 두 번째 주장은pattern_to_search는 파일에서 검색하는 정규 표현입니다.Python에 정의된 정규 표현 형식을 사용합니다. re도서관.도서관. In this script, the 이 스크립트에서는.뉴라인

인수입니다.file_pattern 는입니다.이것은 파일명으로 동작하는 다른 정규 표현입니다.이 정규식과 일치하는 파일만 고려됩니다.

들어 Python 하려면 Python 파일을 검색해야 합니다.pyPool(에 말이 붙다Adaptor 저는 다음과 합니다.

./sniff.py . "Pool(.*?Adaptor"  .*py
./Demos/snippets/cubeMeshSigNeur.py:146 
./Demos/snippets/testSigNeur.py:259 
./python/moose/multiscale/core/mumbl.py:206 
./Demos/snippets/multiComptSigNeur.py:268 

그리고 voila는 일치하는 파일 경로와 일치하는 행 번호를 생성합니다.일치하는 것이 여러 개 발견되면 각 행 번호가 파일 이름에 추가됩니다.

언급URL : https://stackoverflow.com/questions/16956810/how-to-find-all-files-containing-specific-text-string-on-linux

반응형