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.