디렉토리에서 패턴을 재귀적으로 검색하고 파일 이름과 줄 번호만 인쇄하는 방법

디렉토리에서 패턴을 재귀적으로 검색하고 파일 이름과 줄 번호만 인쇄하는 방법

현재 나는 다음과 같이 grep을 사용합니다.

grep -lr <PATTERN> .

그러면 내용(이름 아님)에 포함된 모든 파일 목록이 포함된 다음 출력이 제공됩니다.

./path/to/file1
./path/to/file2
...

이것은 중요하지 않지만 줄 번호를 아는 것이 유용할 것입니다. 다음 출력은 이상적이지만 grep의 매뉴얼 페이지를 살펴본 후 올바른 스위치를 찾을 수 없는 것 같습니다.

./path/to/file1 15, 22, 54
./path/to/file2 16, 17
...

grep이나 다른 도구를 사용하여 이를 달성할 수 있습니까?

답변1

확인하다유사한 작업이 기본적으로 수행됩니다. 당신은 그것을 사용할 수 있습니다

$ ack blah
path/to/blah
16: blah blah
19: blah blah blah

path/to/more/blah
21: blahness

일치하는 파일 이름만 원하는 경우 이라고 말하면 각 파일에 대한 일치 항목 수를 알려줍니다 ack -l.ack -lc

답변2

Grep은 파일 이름만 인쇄하거나 파일 이름과 일치 개수 또는 일치하는 줄(파일 이름과 줄 번호가 포함될 수 있음)만 인쇄하도록 선택할 수 있지만 여러 일치 항목을 단일 줄로 압축할 수는 없습니다.

grep 출력을 필터링하거나 awk와 같은 다른 도구를 사용할 수 있습니다.

find . -type f -exec awk 'FNR==1 {if (found) print ""; found=0}
                          /PATTERN/ { if (!found) printf("%s", FILENAME);
                                      printf(" %d", FNR);
                                      found=1 }
                          END {if (found) print ""}' {} +

답변3

grep -rins <pattern> *

이것이 귀하의 요구 사항을 충족합니까?

를 사용할 때와 같이 더 복잡한 패턴이 있는 경우 egrep이 기능을 사용하면 유용할 수 있습니다 egrep -rinos <pattern> *.

가독성을 더욱 향상시키려면 --color매개변수 목록에 추가하세요. 개인적으로 내 .zshrc:

export GREP_OPTIONS="--color"

답변4

grep태그 -H에는 파일 이름이 포함되어 있으며 grep-n 태그는 줄 번호를 인쇄합니다. 첫 번째 일치 항목과 파일 이름만 나열하려면 를 사용할 수 있습니다 -l.
다른 정보를 제외하려면 로 파이프할 수 sed있는 줄 번호와 파일 이름을 가져오는 동안 으로 파이프할 수 있습니다 sed.

관련 정보