grep 출력에 파일 이름 및 줄 번호 표시


87

grep을 사용하여 내 레일 디렉토리를 검색하려고합니다. 특정 단어를 찾고 있는데 grep 파일 이름과 줄 번호를 인쇄하고 싶습니다.

나를 위해 이것을 할 grep 플래그가 있습니까? 나는의 조합을 사용하는 것을 시도하고있다 -n-l그러나이 중 하나없는 번호로 파일 이름을 인쇄하거나 쉽게 읽을 수 없습니다 터미널에 많은 텍스트를 덤핑하고 있습니다.

전의:

  grep -ln "search" *

awk로 파이프해야합니까?


답변:


139

-l의 출력을 억제하기 때문에 너무 제한적 이라고 생각 -n합니다. 나는 제안 할 것입니다 -H( --with-filename) : 각 일치에 대한 파일 이름을 인쇄하십시오.

grep -Hn "search" *

출력량이 너무 많으면 -o일치하는 부분 만 인쇄 해보십시오 .

grep -nHo "search" * 

이 대답은 나에게도 효과적이었습니다. 재귀 검색이 필요했고 다음 예제 명령을 사용했습니다 : grep -Hnor "localhost". 이 목록은 파일 이름과 줄 번호, 짧고 간결한 모든 일치 항목을 나열합니다.
Tore Aurstad

이것은 또한 단지 파일 이름과 라인 번호 결과를 표시하지
elig

30
grep -rin searchstring * | cut -d: -f1-2

즉, 재귀 적으로 검색 ( searchstring이 예 에서는 문자열 )하고 대소 문자를 무시하고 줄 번호를 표시합니다. 그 grep의 출력은 다음과 같습니다.

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

다음 :으로 필드 구분 기호로 콜론 을 사용 하고 필드 1 ~ 2를 표시 하는 cut 명령으로 결과를 파이프합니다 .

줄 번호가 필요하지 않을 때는 자주 사용하고 -f1(파일 이름과 경로 만) 출력을으로 파이프하여 uniq각 파일 이름을 한 번만 볼 수 있습니다.

grep -ir searchstring * | cut -d: -f1 | uniq

1
나는 이것이 원래 질문에 가장 잘 대답한다고 생각합니다. 파일 이름과 줄 번호 만.
mastaBlasta 2015 년

1
이미 콜론이 하나 포함되어 있으므로`C : \ Users \ me \ git`와 같은 Windows의 절대 경로 이름이있는 경우에는 작동하지 않습니다.
hirse

19

나는 사용하는 것을 좋아한다 :

grep -niro 'searchstring' <path>

그러나 그것은 내가 항상 다른 방법을 잊고 어떤 이유로 로버트 드 grep -니로 를 잊을 수 없기 때문입니다 :)


위의 찬성 투표를받을 거라고는 생각도 못했어요. 그냥 재미있는 공유. 감사! (하지만 실제로 작동합니다-적어도 MacOS에서는)
Bas van Ommen

이것을 기억하는 방법을 사랑하십시오!
Greg Hilston

1

@ToreAurstad의 주석은 철자가 입력 grep -Horn 'search' ./되어 기억하기 쉽습니다.

grep -HEroine 'search' ./ 또한 작동 할 수 있습니다;)

호기심 :

$ grep --help | grep -Ee '-(H|E|r|o|i|n|e),'
  -E, --extended-regexp     PATTERNS are extended regular expressions
  -e, --regexp=PATTERNS     use PATTERNS for matching
  -i, --ignore-case         ignore case distinctions
  -n, --line-number         print line number with output lines
  -H, --with-filename       print file name with output lines
  -o, --only-matching       show only nonempty parts of lines that match
  -r, --recursive           like --directories=recurse

0

다음은 upvoted 답변을 사용하여 문자열을 포함하는 포트란 파일을 찾기 위해 트리를 검색하는 방법입니다.

find . -name "*.f" -exec grep -nHo the_string {} \;

nHo가 없으면 어딘가에서 일부 파일이 문자열과 일치한다는 것을 알게됩니다.

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