텍스트 파일에서 단어와 일치하는 줄 찾기

텍스트 파일에서 단어와 일치하는 줄 찾기

grep 등을 사용하여 텍스트 문서의 어떤 줄이 패턴과 일치하는 특정 단어인지 알아낼 수 있는 방법이 있습니까? 감사해요.

답변1

-n예, 옵션이 있습니다 grep.

~에서man grep:

-n, --line-number
              Prefix each line of output with the 1-based line number within its input file.

예를 들어 다음과 같은 파일이 있는 경우 file.txt:

this is
foo test
and this is
bar test

전류 출력 grep -n "test" file.txt:

$ grep -n "test" file.txt 
2:foo test
4:bar test

여기서 2와 4는 패턴이 발견된 줄 번호를 나타냅니다.

답변2

grep방법은 가장 간단하지만 일치하는 줄의 줄 번호를 인쇄합니다 pat.

  1. 진주

     perl -lne 'print $. if /pat/' file
    
  2.  awk '/pat/{print NR}' file
    
  3. sed

     sed -n '/pat/=' file
    

답변3

사용행복하다(이전 Perl_6)

raku -ne 'state $i=0; ++$i; put $i if /pat/;' 

위의 Raku 코드는 일치하는 줄의 줄 번호를 pat각 일치 항목마다 하나씩 인쇄합니다. 모든 일치 항목을 한 줄에 표시하려면 put $i로 바꾸십시오 print "$i ".

설명하자면, Perl의 많은 특수 변수가 Raku에서 생략되었습니다. 대조적으로, Raku는 state변수가 한 번만 시작되도록 허용합니다. 이 구문과 세미콜론으로 구분된 "C와 유사한" 구문은 Raku의 조건부 줄 번호 매기기에 사용할 수 있습니다. 위의 첫 번째 문에서는 $i키워드를 사용하여 변수를 선언했는데 state, 이는 변수가 한 번 초기화된다는 의미입니다. 이 state키워드는 기존 Perl/Raku 명령줄 플래그와 원활하게 작동하므로 -ne$i번째 문에서 increment를 사용할 수 있고 ++$i세 번째 문과 일치하는 값을 사용할 수 있습니다.$iput

Raku의 증분(비조건부) 행 번호 매기기는 $증가/감소할 수 있는 익명 상태 변수 (예: ++$또는 )를 사용하는 다른 방법을 통해 수행됩니다. $++따라서 일치하는 패턴의 각 인스턴스에 번호를 매기는 작업은 다음과 같이 수행할 수 있습니다(Raku의 =>"fat-arrow" 해시 생성자 사용). put대신 say탭으로 구분된 출력을 얻으려면 다음을 사용하십시오 .

raku -ne 'state $i=0; ++$i; say (++$ => $i) if /4/;' 

입력 예(첫 번째 줄은 비어 있음):

0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789

출력 예(위의 최종 코드, 'ordinal-instance' =>'line-number'. put대신 say탭으로 구분된 값을 얻으려면 사용):

1 => 6
2 => 7
3 => 8
4 => 9
5 => 10
6 => 11

https://docs.raku.org/syntax/state
https://raku.org

관련 정보