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 

菲尔2.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

使用 OpenBSDawkmawkGNU进行测试awk

对于sed,这与上面的非常相似:

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

相关内容