정규식을 기반으로 파일 줄의 첫 번째 줄과 마지막 줄의 하위 집합을 추출합니다.

정규식을 기반으로 파일 줄의 첫 번째 줄과 마지막 줄의 하위 집합을 추출합니다.

큰 텍스트 파일이 있는데 그 파일의 일부 줄만 보고 싶습니다. 첫 번째 행이 regex와 일치하기를 원하고 R해당 행이 regex와 일치하면 S해당 행이나 후속 행에 대해서는 신경 쓰지 않습니다. 가운데 줄은 일치하지 않습니다 R. 나중에 출력을 어딘가에 파이프할 수 있도록 bash 명령을 사용하여 명령줄에서 이 작업을 수행할 수 있는 방법이 있습니까?

답변1

그리고 sed:

sed -n '/R/,$!d; /S/q; p'

예:

$ seq 20 | sed -n '/6/,$!d; /1/q; p'
6
7
8
9

답변2

펄 사용:

# perl -ne 'print if ( /R/ .. /S/ ); last if /S/'

S-Matching 정규식을 인쇄하지만 '

답변3

awk를 사용하세요

awk 'x&&/S/{exit};x+=/R/' file

seq 20 | awk 'x&&/1/{exit};x+=/6/'
6
7
8
9

답변4

이 문제를 해결하기 위해 프로그램을 작성했습니다.에서부터

다음과 같이 사용할 수 있습니다.

cat file | fromto -f R -T S

R가져오려는 정규식은 어디에 있습니까?~에서, S캡처하려는 정규식입니다.도착하다. 그 사이의 모든 줄을 인쇄합니다. -f"'from' 줄을 포함함"을 의미하고, -F"'from' 줄을 포함하지 않음"을 의미합니다. 와 같다 -t/ -T. 문제는 "to" 줄을 제외하고 따라서 -T해당 요구 사항에 대한 인수를 제외하는 것입니다. 이것을 사용하면 -t"to" 줄이 인쇄됩니다(그러나 다음 줄은 인쇄되지 않음).

관련 정보