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배 빠르고 심지어 '실버 서처'의 패턴도 무시합니다..gitignore
filename을 클릭합니다.
다음을 사용할 수 있습니다.
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
검색을 .재귀 검색을 조합할 수 .find
xargs
:
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' {} \;
순서:
find
, 파일 검색,- ★★
grep
전부 다요.
이이 of of of of of of of of of of of of of of of of of of of 의 힘을 얻을 수 있습니다.find
파일을 검색합니다.
-name Pattern
grep
「이것들」은 다음과 같습니다.
find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;
여러 가지 을 사용할 수 있습니다.find
파일 검색을 개선합니다.
Silver Searcher는 훌륭한 도구이지만 ripgrep은 더 나을 수 있습니다.
Linux, Mac, Windows에서 동작하며, 몇 달 전에 해커 뉴스에서 작성되었습니다(이것은 GitHub 링크가 있는 Andrew Gallant의 블로그에 링크되어 있습니다).
다음은 파일 검색에 사용할 수 있는 몇 가지 명령어 목록입니다.
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"
옵션에 대한 간단한 설명:
.
find
는, 의 directorydirectory 에서 합니다.-name
*.*
" : " : " )*.pas
- o -name " -o - name "*.dfm
) : " " 만 : 。*.pas
★★★*.dfm
「」, 「」로 된 파일-o
-type f
는, 을 찾고 을 지정합니다.-print0
★★★★★★★★★★★★★★★★★」--null
|
(는 중요한 (파이프)의 을 (파이프)의 것으로find
grep
xargs
파일명에 공백이 있는 파일명을 전달할 수 있기 때문에 경로와 파일명을 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 파일을 검색해야 합니다.py
Pool(
에 말이 붙다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
'programing' 카테고리의 다른 글
'\r': 명령어를 찾을 수 없습니다 - .syslogrc / .syslog_profile (0) | 2023.04.10 |
---|---|
64비트 Windows에서 64비트 DLL이 System32로, 32비트 DLL이 SysWW64로 이동하는 이유는 무엇입니까? (0) | 2023.04.10 |
SQL Server 2005에서 전화번호를 저장하기 위해 사용하는 데이터 유형은 무엇입니까? (0) | 2023.04.10 |
Gem 설치 오류:먼저 개발 도구를 설치해야 합니다(Windows). (0) | 2023.04.10 |
IList 또는 IENumerable에서 쉼표로 구분된 목록 생성 (0) | 2023.04.10 |