일부 텍스트를 찾은 후 특정 줄을 읽는 방법은 무엇입니까?

일부 텍스트를 찾은 후 특정 줄을 읽는 방법은 무엇입니까?

텍스트를 찾은 후 특정 줄 수를 어떻게 읽을 수 있나요?

예:

다음에서 "Unix"를 찾은 후 다음 2줄을 읽어보세요.

Test 1
Test 2
Test 3
Test 4
UNIX
Test 5
Test 6
Test 7
Test 8
Test 9

결과는 다음과 같습니다.

Test 5
Test 6

참고: 마지막 예의 "Unix"는 인수이므로 다른 텍스트일 수 있습니다.

내가 가진 것:

아직 아이디어가 부족해서 조명만 있으면 됩니다. 그렇게 하기 위해 다른 스크립트를 만드는 것을 생각해보세요.

답변1

해결책 grep:

grep -A2 -P '^UNIX$' file

설명: -A의미: 일치 후 다음 두 줄을 인쇄합니다.

또는awk:

awk '$0=="UNIX"{getline; print; getline; print}' file

설명:( ) 줄에서 UNIX를 검색하세요 $0=="UNIX". 발견되면 다음 줄을 버퍼( getline)에 넣고 버퍼( print)를 인쇄합니다. 이것은 두 번 수행됩니다.

또는 다음을 사용하십시오 sed.

sed -n '/^UNIX$/{n;p;n;p}' file

설명:UNIX( )를 검색합니다 /^UNIX$/. 발견되면 에서 해당 부분을 실행합니다 {...}. n다음을 의미하고 p인쇄를 의미합니다. 이것도 두 번 수행됩니다.

답변2

해결책 awk:

$ awk '$0 == "UNIX" {i=1;next};i && i++ <= 2' file
Test 5
Test 6

설명

  • /^UNIX$/{i=1;next}: 가 보이면 UNIX변수를 설정하고 i = 1다음 입력으로 처리합니다.

  • i변수가 설정된 경우 (우리가 본 것을 의미 UNIX), i && i++ <= 2다음 두 줄에서만 참값으로 평가되어 기본 동작이 수행 UNIX됩니다 .awkprint $0

  • 보기 전에는 정의되지 않았으며 이후 세 번째 줄에서 시작하고 UNIX2 보다 큰 값을 가지 므로 표현식이 false로 평가되어 아무것도 수행되지 않습니다.iUNIXii && i++ <= 2awk

답변3

grep -A 2 UNIX file.txt

grep 맨페이지에서는 옵션을 다음과 같이 설명합니다.

  -A NUM, --after-context=NUM
      Print NUM  lines  of  trailing  context  after  matching  lines.
      Places  a  line  containing  --  between  contiguous  groups  of
      matches.

답변4

당신이 사용할 수있는 ex:

ex -s +'1,/UNIX/d|%p|q!' file_or_/dev/stdin

어디:

관련 정보