여러 파일 중에서 검색

여러 파일 중에서 검색

많은 파일에서 문자열을 검색하는 정교한 기술이 있습니까?

이 기본 기술을 사용해 보았습니다.

for i in `find .`; do grep searched_string "$i"; done;

복잡해 보이지 않으며 파일 계층 구조에서 아무것도 발견되지 않습니다.

답변1

다음 중 하나를 수행할 수 있습니다.

grep pattern_search . # 현재 디렉토리에서 일반 grep을 실행합니다.

grep pattern_search * # 현재 디렉토리의 모든 와일드카드 파일에 일반 grep을 사용합니다.

grep -R pattern_search . # 현재 디렉터리에서 재귀 검색을 사용합니다.

grep -H pattern_search *# 파일이 2개 이상일 경우 파일명을 출력합니다. '-시간'

(gnu 매뉴얼에서) 다음과 같은 다른 옵션:

--directories=action
    If an input file is a directory, use action to process it. By default, 
    action is ‘read’, which means that directories are read just as if they 
    were ordinary files (some operating systems and file systems disallow 
    this, and will cause grep to print error messages for every directory 
    or silently skip them). If action is ‘skip’, directories are silently 
    skipped. If action is ‘recurse’, grep reads all files under each 
    directory, recursively; this is equivalent to the ‘-r’ option. 
--exclude=glob
    Skip files whose base name matches glob (using wildcard matching). A 
    file-name glob can use ‘*’, ‘?’, and ‘[’...‘]’ as wildcards, and \ to 
    quote a wildcard or backslash character literally. 
--exclude-from=file
    Skip files whose base name matches any of the file-name globs read from 
    file (using wildcard matching as described under ‘--exclude’). 
--exclude-dir=dir
    Exclude directories matching the pattern dir from recursive directory 
    searches. 
-I
    Process a binary file as if it did not contain matching data; this is 
    equivalent to the ‘--binary-files=without-match’ option. 
--include=glob
    Search only files whose base name matches glob (using wildcard matching 
    as described under ‘--exclude’). 
-r
-R
--recursive
    For each directory mentioned on the command line, read and process all 
    files in that directory, recursively. This is the same as the 
    --directories=recurse option.
--with-filename
    Print the file name for each match. This is the default when there is 
    more than one file to search. 

답변2

나는 사용한다:

find . -name 'whatever*' -exec grep -H searched_string {} \;

답변3

Chris Card의 답변을 바탕으로 find . -print0 | xargs -r0 grep -H searched_string 파일 이름의 공백이 올바르게 처리되도록 xargs의 조합과 함께 내 자신의 것을 사용했습니다. 명령줄에 최소한 하나의 파일 이름을 제공하도록 xargs에 지시합니다. 나는 또한 고정 문자열(정규식 없이)을 원할 때 보통 이것을 사용합니다. 조금 더 빠릅니다.-print0-0-rfgrep

-exec+보다 약간 느리지 만 -exec+보다 더 널리 사용됩니다 find . -print0 | xargs -0 cmd.find . -exec cmd {} \;find . -exec cmd {} +

답변4

명령에 /dev/null을 추가하면 해당 문자열과 일치하는 파일 이름도 얻을 수 있습니다.

for i in `find .`; do grep searched_string "$i" /dev/null ; done;

관련 정보