grep을 사용하여 줄 번호 만보고


105

잘못된 형식을 포함 할 수있는 파일이 있습니다 (이 경우 패턴 발생 \\backslash). 나는 grep이것이 발생하는 줄 번호 만 반환하는 데 사용 하고 싶습니다 (일치가 여기에 있었기 때문에 줄 # x로 이동하여 수정하십시오).

그러나 grep -n일치 또는 줄 자체가 아니라 줄 번호 ( ) 를 인쇄하는 방법이없는 것 같습니다 .

다른 정규식을 사용하여 줄 번호를 추출 할 수 있지만 grep이 스스로 할 수 없도록하고 싶습니다. grep -no가장 가깝다고 생각하지만 여전히 일치하는 것을 표시합니다.


1
저에게 가장 유용한 대답은 다음과 같은 질문이었습니다. grep -no! 이것은 내가 시도하고하려고 여기에 온 일을했습니다! (즉, 축소 된 자바 스크립트 소스 파일과 같이 때때로 매우 긴 줄을 인쇄하지 마십시오.)
LondonRob

답변:


156

시험:

grep -n "text to find" file.ext | cut -f1 -d:

1
내 컴퓨터에서이은 행 번호 (내가 한 번만 인쇄 파일 내부에 3 경기가 그래서있는 경우)는 ... 여전히 매우 유용하지 않고 일치하는 파일을 인쇄한다
마리오 아 와드

3
@MarioAwad, -f매개 변수 를 조작해야합니다 . 나에게는 -f2. (이 오래된 물건입니다 알고,하지만 난 그게 불쌍한 영혼을 도울 수 있다고 생각)
에밀 Sierżęga에게

사랑스러운 오래된 유닉스 임시 쉘 스크립팅에 감사드립니다. 이것은 유연한 도구가 복잡성과 학습 곡선의 가치가 있음을 보여줍니다!
Alex

12
grep -n "text to find" file.ext | cut -f1,2 -d:파일 이름과 줄 번호를 보여줍니다.
Jondlm

2
@jondim 검색되는 파일이 두 개 이상인 경우에만 파일 이름을 표시합니다. -H파일이 하나만있을 때 파일 이름을 표시 하도록 추가해야 합니다. 반대로, -h얼마나 많은 파일을 검색하든 상관없이 파일 이름을 출력하지 않도록 항상를 사용할 수 있습니다.
Mark Reed

45

AWK를 사용할 수있는 경우 :

awk '/textstring/ {print FNR}' textfile

이 경우 FNR은 라인 번호입니다. AWK는 grep | cut을 볼 때나 grep 출력을 가져 와서 조작 할 때 유용합니다.


2
(과거에는 더 중요했지만 여전히) 하나의 프로세스를 사용하며 초보자도 쉽게 이해할 수 있습니다!
bgStack15 jul.

NR이 경우처럼 검사중인 파일이 하나 뿐인 경우에도 작동합니다.
Mark Reed

단순히 훌륭합니다! 너무 빠르다!
GTodorov

34

이 모든 답변에는 grep이 전체 일치하는 줄을 생성 한 다음 다른 프로그램으로 파이프해야합니다. 줄이 매우 긴 경우 sed를 사용하여 줄 번호를 출력하는 것이 더 효율적일 수 있습니다.

sed -n '/pattern/=' filename

2

Bash 버전

    lineno=$(grep -n "pattern" filename)
    lineno=${lineno%%:*}

1
두 개 이상의 선이 해당 패턴과 일치하면 어떻게됩니까?
izabera 2014

@izabera 추가 | tail -1
Diego

1

나는에 대한 답변을 권장 sed하고 awk그냥 줄 번호를 얻기보다는 사용하기위한 grep전체 일치하는 라인을 얻기 위해 다음과 출력에서 그것을 제거 cut하거나 다른 도구입니다. 완전성을 위해 Perl을 사용할 수도 있습니다.

perl -nE '/pattern/ && say $.' filename

또는 Ruby :

ruby -ne 'puts $. if /pattern/' filename

0

첫 번째가 아닌 콜론 뒤에 두 번째 필드를 원할 것입니다.

grep -n "text to find" file.txt | cut -f2 -d:


이것은 텍스트를 일치시키려는 경우 작동하지만 줄 번호는 OP가 요청한 것입니다.
AJP

0

패턴과 일치하는 줄 수를 계산하려면 :

grep -n "Pattern" in_file.ext | wc -l 

일치하는 패턴을 추출하려면

sed -n '/pattern/p' file.est

패턴이 일치 된 줄 번호를 표시하려면

grep -n "pattern" file.ext | cut -f1 -d:

2
1st는 "grep -c 'Pattern'in_file.ext"여야합니다. 두 번째는 "grep -o 'Pattern'in_file.ext"여야합니다. sed 또는 wc를 포함 할 필요가 없습니다.
thelogix

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