我有文件 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
使用 OpenBSDawk
和mawk
GNU进行测试awk
。
对于sed
,这与上面的非常相似:
sed -nr '/^Type head(er)? call_header$/,/^END?$/p' file1.txt