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

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

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

전의:

  grep -ln "search" *

awk로 파이프해야합니까?



답변

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

grep -Hn "search" *

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

grep -nHo "search" *


답변

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


답변

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

grep -niro 'searchstring' <path>

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


답변

@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


답변

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

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

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


답변