awk 正则表达式与空格匹配的模式

awk 正则表达式与空格匹配的模式

我有一个文件fruits

ap ple 
ora nge 
pe ar
gra pes
bro ccoli
tom ato
ap ache

我想制作一个 awk 脚本来检查文件中有多少水果。

我努力了

awk -F: '/ap|ora|pe|gra ple|nge|ar|pes/ {sum+=1} END {print sum+0}' fruits

它应该返回 4,因为他们的 4 对完全匹配,但我认为他们返回 5 是因为ap ache.在这种情况下,空间没有注册吗?

答案1

正则表达式ap|ora|pe|gra ple|nge|ar|pes匹配

aporape 或者 gra ple 或者 ngearpes

您需要添加一些分组来匹配两个单独的替代项,中间有空格:

$ awk '/(ap|ora|pe|gra) (ple|nge|ar|pes)/' fruits 
ap ple 
ora nge 
pe ar
gra pes

$ awk '/(ap|ora|pe|gra) (ple|nge|ar|pes)/ {sum+=1} END{print sum}' fruits 
4

请注意,您不需要设置-F为非空白值,因为/pattern/默认情况下匹配整个记录。

相关内容