주어진 문자열로 시작하는 줄이 포함된 단락을 인쇄합니다.

주어진 문자열로 시작하는 줄이 포함된 단락을 인쇄합니다.

내 입력 파일은 다음과 같습니다. 여기서 레코드는 빈 줄로 구분됩니다. xx줄 시작 부분에 기록(단락)을 인쇄해야 합니다 .

cat in.txt
a cfg
b hfh
c gfh
xx jhl
d kjl

a opi
b ghj
c tyu
yy xxx
d ghj

a xxx
b fgk
c ghf
z zxx
d ghj

내 예상 결과는 다음과 같습니다

a cfg
b hfh
c gfh
xx jhl
d kjl

다음 명령을 시도했지만 작동하지 않습니다.

awk -v RS='' -v ORS='\n\n' "/^XX/" in.txt

^이 경우에는 작동하지 않습니다

답변1

다음을 사용하는 것이 더 쉽습니다 perl.

perl -00 -ne 'print if /^xx/m' in.txt

m플래그는 레코드의 시작과 끝뿐만 아니라 레코드 내 각 줄의 시작과 끝에서도 일치하는 여러 줄 모드를 활성화 ^합니다 $.

를 사용하면 awk언제든지 다음을 수행할 수 있습니다.

awk -v RS='' -v ORS='\n\n' '/(^|\n)xx/' in.txt 

즉, 레코드의 시작 부분( ^)을 일치시키거나 |개행 문자( \n) 뒤의 ( )를 일치시킵니다.

관련 정보