awkは1行で複数のパターンを探します

awkは1行で複数のパターンを探します

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

OpenBSDawkとGNUでmawkテストされましたawk

の場合、sedこれは上記と非常に似ています。

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

関連情報