grep — 일치하는 파일 이름을 나열합니다


31

디렉토리에 .html 파일이 많이 있습니다. 각 파일을 살펴보고 패턴 (MD5)과 일치 시키려고합니다. 이것으로 충분합니다. 문제는 일치하는 파일이 무엇인지 알아야한다는 것입니다.

cat *.html | grep 75447A831E943724DD2DE9959E72EE31

일치하는 부분을 찾은 HTML 페이지 내용 만 반환하지만 찾은 파일을 알려주지 않습니다. 일치하는 부분을 찾은 파일 이름을 grep하려면 어떻게해야합니까?


제공된 제안이 실제로 작동하지 않습니다 .... '표준 입력'cat * .html | grep -i -H 1ee024007823cc0bfbefba98ba1e1f4c (표준 입력) : <html> <head> <title>
BeMy Friend 2012

4
당신은 요점을 놓치고 있습니다. 당신은 고양이를 사용할 필요가 없습니다. 고양이는 grep이 개별 파일을 구별하지 못하게합니다.
muru

이 스택 오버플로 게시물에 유용 할 수 있습니다 .
Pablo A

답변:


32
grep -H 75447A831E943724DD2DE9959E72EE31 *.html

-H, --with-filename
              Print the file name for each match. This is
              the default when there is more than one file
              to search.

3
html 파일이 둘 이상있는 한 여러 파일의 기본값이므로 -H필요하지 않습니다.
muru

1
죄송합니다. 질문이 불쾌했습니다. 나는이 작업을 잠시 동안 해왔으며 많은 스위치를 사용했으며 기본적으로 파일 이름을 나열하는 MAN 페이지를 읽었습니다. 그러나 내가 얻는 것은 (표준 입력 ) 파일 이름을 나열해야합니다.
BeMy Friend

-H 스위치를 제공 한 경우에만 해당됩니다. OP에 나열된 것만 수행하면 파일 이름이 제공되지 않습니다.
BeMy Friend

3
@BeMyFriend, 문제는 cat입니다. cat연결하는 것을 의미합니다. 당신을 togheter 모든 파일을 연결하면 이전 에 전달 grep, grep단지 하나의 큰 표준 입력 파일을 참조하지 (짧은 점을하는) 당신은 하나의 파일에 대한 정보를 다시 제공 할 수 있습니다. 만나다?. 사이러스, 대답에서 이것을 설명하는 것은 어떻습니까?
Rmano 2019

문제는 고양이 명령이지만 해결책은 무엇입니까?
Josef Klimuk

20

디렉토리에서 RECURSIVELY 문자열을 포함하는 파일을 찾기 위해 항상 이것을 사용합니다 (즉, 하위 하위 폴더를 통과 함). grep -Ril "yoursearchtermhere"

  • R 재귀 적으로 검색하는 것입니다 (심볼릭 링크를 따름)
  • i 대소 문자를 구분하지 않는 것입니다
  • l 파일 이름 만 나열하면됩니다.

질문에 대답 grep -l '75447A831E943724DD2DE9959E72EE31' *.html하면되지만 grep -Ril '75447A831E943724DD2DE9959E72EE31'하위 폴더의 모든 파일에서 대소 문자를 구분하지 않고 해당 문자열을 찾으 려면 할 수 있습니다


macOS에는 항상 파일 정의가 필요합니다. 와일드 카드 일 수도 있습니다. 그렇지 않으면 stdin( grep : warning : stdin의 재귀 적 검색 , 재귀 적 stdin 입력이 의미하는 모든 것을 :-) 에서 입력 한 것으로 가정합니다 . 다시 말해 :grep -Ril 'texttofind' *
Ville

grep -RiH 'pattern'쇼 파일 이름과 일치하는 라인
Ikrom

7

당신은 이것을 시도 할 수 있습니다

grep -rl '75447A831E943724DD2DE9959E72EE31' * > found.txt

2
grep -r -H 75447A831E943724DD2DE9959E72EE31 *.html | awk -F : ' { print $1 } '

대안

grep -r -l 75447A831E943724DD2DE9959E72EE31 *.html

위의 작업은 폴더와 하위 폴더에서 재귀 적으로 검색하고 파일의 경로를 인쇄합니다.


grep -r -l은 나에게 일한 유일한 것입니다.
Josef Klimuk

0

사이러스에 의해 게시 대답은 절대적으로 적절하고 올바른 방법입니다 TM이 함께 할 grep우리가 경우 에만 파일을 찾을 필요가있다 . 파일 이름 이 일치하는 파일 이름에 대한 추가 구문 분석 또는 작업이 필요한 경우 whileloop with if문 을 사용할 수 있습니다 . 다음은 파일 이름 목록 을 안전하게 구문 분석하기 위해 가장 일반적으로 사용되는 find+ while구조 에서 파일 이름 목록을 가져 오는 예 입니다.

find -type f -name "*.html" -print0 | while IFS= read -r -d '' filename
do
    if grep -q 'PATTERN' "$filename"
    then
        printf "%s found in %s\n" 'PATTERN' "$filename"
        # Here we can insert another command or function
        # to perform other operations on the filename
    fi
done

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