현재 나는 다음과 같이 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
.