디렉토리에 .html 파일이 많이 있습니다. 각 파일을 살펴보고 패턴 (MD5)과 일치 시키려고합니다. 이것으로 충분합니다. 문제는 일치하는 파일이 무엇인지 알아야한다는 것입니다.
cat *.html | grep 75447A831E943724DD2DE9959E72EE31
일치하는 부분을 찾은 HTML 페이지 내용 만 반환하지만 찾은 파일을 알려주지 않습니다. 일치하는 부분을 찾은 파일 이름을 grep하려면 어떻게해야합니까?
디렉토리에 .html 파일이 많이 있습니다. 각 파일을 살펴보고 패턴 (MD5)과 일치 시키려고합니다. 이것으로 충분합니다. 문제는 일치하는 파일이 무엇인지 알아야한다는 것입니다.
cat *.html | grep 75447A831E943724DD2DE9959E72EE31
일치하는 부분을 찾은 HTML 페이지 내용 만 반환하지만 찾은 파일을 알려주지 않습니다. 일치하는 부분을 찾은 파일 이름을 grep하려면 어떻게해야합니까?
답변:
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.
-H
필요하지 않습니다.
cat
입니다. cat
연결하는 것을 의미합니다. 당신을 togheter 모든 파일을 연결하면 이전 에 전달 grep
, grep
단지 하나의 큰 표준 입력 파일을 참조하지 (짧은 점을하는) 당신은 하나의 파일에 대한 정보를 다시 제공 할 수 있습니다. 만나다?. 사이러스, 대답에서 이것을 설명하는 것은 어떻습니까?
디렉토리에서 RECURSIVELY 문자열을 포함하는 파일을 찾기 위해 항상 이것을 사용합니다 (즉, 하위 하위 폴더를 통과 함).
grep -Ril "yoursearchtermhere"
R
재귀 적으로 검색하는 것입니다 (심볼릭 링크를 따름)i
대소 문자를 구분하지 않는 것입니다l
파일 이름 만 나열하면됩니다.질문에 대답
grep -l '75447A831E943724DD2DE9959E72EE31' *.html
하면되지만 grep -Ril '75447A831E943724DD2DE9959E72EE31'
하위 폴더의 모든 파일에서 대소 문자를 구분하지 않고 해당 문자열을 찾으 려면 할 수 있습니다
stdin
( grep : warning : stdin의 재귀 적 검색 , 재귀 적 stdin 입력이 의미하는 모든 것을 :-) 에서 입력 한 것으로 가정합니다 . 다시 말해 :grep -Ril 'texttofind' *
grep -RiH 'pattern'
쇼 파일 이름과 일치하는 라인
grep -r -H 75447A831E943724DD2DE9959E72EE31 *.html | awk -F : ' { print $1 } '
대안
grep -r -l 75447A831E943724DD2DE9959E72EE31 *.html
위의 작업은 폴더와 하위 폴더에서 재귀 적으로 검색하고 파일의 경로를 인쇄합니다.
사이러스에 의해 게시 대답은 절대적으로 적절하고 올바른 방법입니다 TM이 함께 할 grep
우리가 경우 에만 파일을 찾을 필요가있다 . 파일 이름 이 일치하는 파일 이름에 대한 추가 구문 분석 또는 작업이 필요한 경우 while
loop 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