내 입력 파일은 다음과 같습니다. 여기서 레코드는 빈 줄로 구분됩니다. 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
) 뒤의 ( )를 일치시킵니다.