줄 끝에 줄 번호와 적중 횟수를 표시하도록 grep 출력을 어떻게 형식화 할 수 있습니까?


378

grep을 사용하여 파일의 문자열을 일치시킵니다. 예제 파일은 다음과 같습니다.

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt 보고

example two null,
example four null,

다음과 같이 일치하는 줄을 줄 번호와 함께 반환하려면 어떻게해야합니까?

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

나는 -c가 총 일치 줄을 반환한다는 것을 알고 있지만 total null count앞에 추가하기 위해 올바르게 형식을 지정 하는 방법을 모르고 줄 번호를 추가하는 방법을 모른다.

어떡해?

답변:


600

-n 줄 번호를 반환합니다.

-i무시 케이스입니다. 대소 문자를 구분할 필요가없는 경우에만 사용

$ grep -in null myfile.txt

2:example two null,
4:example four null,

awk일치 후 줄 번호를 인쇄하려면 다음을 결합 하십시오.

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

명령 대체를 사용하여 총 널 수를 인쇄하십시오.

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

이전에 : 대신에 줄 번호를 추가 하여이 형식을 지정할 수 있습니까?
London

해결책은 괜찮아 보이지만 오류가 발생합니다awk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
London

죄송합니다. 리눅스로 전환했습니다. :) 윈도우 버전이 좋지 않았습니다.
London

1
...이 기사를 -ni기억하는 기사
santiago arizti

59

-n또는을 사용하십시오 --line-number.

man grep더 많은 옵션을 확인하십시오 .


3
새로운 리눅스 사용자는 man 페이지를 읽는 게으르다. 그러나 그들이 리눅스를 충분히 사용한다면, 그들은 그것에 사용될 것이다 :) 그것은 매우 유용하다 :)
Dzung Nguyen

19
항상 게으른 것은 아니지만 종종 새로운 Linux 사용자가 매뉴얼 페이지를 이해하지 못하는 경우가 종종 있습니다. (그들은 비밀 처럼 보일 수 있습니다 )
TecBrat

때때로 맨 페이지는 많은 페이지를 차지할 수 있습니다. 그리고이 모든 것을 읽기는 어렵습니다
Eugen Konkov

7

grep -n -i null myfile.txt각 일치 항목 앞에 줄 번호를 출력하는 데 사용 합니다.

grep에 일치하는 총 줄 수를 인쇄하는 스위치가 없다고 생각하지만 grep의 출력을 wc로 파이프하면됩니다.

grep -n -i null myfile.txt | wc -l

3
-c는 일치하는 총 줄을 인쇄합니다
dpatchery

네 말이 맞아 불행히도 정상적인 출력을 억제합니다.
jhenninger

7

또는 awk대신 사용하십시오.

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

4

grep행을 찾고 행 번호를 출력하지만 다른 것을 "프로그램"할 수는 없습니다. 임의의 텍스트를 포함하고 다른 "프로그래밍"을하려면 awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

또는 쉘 (bash / ksh) 만 사용하십시오.

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

또는 펄에서 (완벽 성을 위해 ...) :

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'


1

미래에 당신에게 도움이 될 것 같아요. 여러 문자열 및 출력 행 번호를 검색하고 출력을 통해 찾아 보려면 다음을 입력하십시오.

egrep -ne 'null|three'

표시됩니다:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

적은 세션에서 출력을 표시합니다

6 월

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