awk는 한 줄에서 여러 패턴을 찾습니다

awk는 한 줄에서 여러 패턴을 찾습니다

file1.txt /file2.txt 파일이 있습니다. awk 명령을 실행하고 "Type header call_header"와 "END" 사이의 경계 검색을 수행하면 END 아래 줄도 인쇄됩니다. 예:-

파일 1.txt

Type header call_header 
abc , def , ghi , 
jkl ,mno 
END 
Define call_header 
type as call_header 

phil2.txt

Type head call_header
data1, data2, voice ,
mms , mms2 
END
Define call_header 
type as call_header

나는 시도했다:

awk '/^Type (header|head) call_header$/,/^END?$/'  {print} file1.txt

그러나 다른 줄도 인쇄합니다.

다음 데이터만 필요합니다.

Type header call_header 
abc , def , ghi , 
jkl ,mno 
END 

답변1

귀하의 awk통화가 잘못되었습니다:

awk '/^Type (header|head) call_header$/,/^END?$/'  {print} file1.txt

여기서는 awk이라는 파일에 대한 검색이 수행됩니다 {print}.

전체 스크립트는 작은따옴표로 묶어야 합니다.

awk '/^Type (header|head) call_header$/,/^END?$/ {print}' file1.txt

또는 대안으로(첫 번째 정규식을 약간 단축하고 완전히 제거 { print }),

awk '/^Type head(er)? call_header$/,/^END?$/' file1.txt

OpenBSD awk및 GNU로 mawk테스트되었습니다 awk.

의 경우 sed이는 위와 매우 유사합니다.

sed -nr '/^Type head(er)? call_header$/,/^END?$/p' file1.txt

관련 정보