首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运算符的Awk正则表达式

运算符的Awk正则表达式
EN

Unix & Linux用户
提问于 2021-08-13 04:57:49
回答 1查看 519关注 0票数 3

我想用我的awk正则表达式来计数和和文件中的匹配数。

文件file包含:

代码语言:javascript
复制
Gra pes
gra ndma
straw berry
blue Berry
banana
peanut
school

我需要为模式匹配做一个正则表达式,但是我不知道如何在regex中实现和/OR,尽管它们具有相同的优先级。

我试过:

代码语言:javascript
复制
awk 'tolower($1) ~ /(gra|straw) (pes|berry)|banana|peanut/ {sum+=1} END {print sum+0}' file

所以它应该是(gra pes, gra berry, straw pes, straw berry) OR banana, peanut并返回4,因为有4个匹配。

我假设我的语法出现了OR香蕉圈花生错误,但我不知道如何修复它。

对出了什么问题有什么想法吗?谢谢

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-08-13 05:27:26

你的雷杰普很好。您的问题是在tolower($1)上匹配它,这是转换为小写的第一个字段(空白,用FS的默认值分隔)。

因此,例如,在第一行(Gra pes)上,它将匹配针对gra的regexp并失败。

为了记录在案,您需要$0

代码语言:javascript
复制
awk 'tolower($0) ~ /regexp/ ...'

还请注意,在默认情况下,regexp没有锚定,因此,它将在peanutbutter上匹配,例如在peanut中找到。如果希望通过regexp将输入记录作为一个整体进行匹配,则需要:

代码语言:javascript
复制
awk 'tolower($0) ~ /^(foo|bar)$/'

它在主题(^)的开头与foobar后面的主题($)后面匹配。请注意,括号在那里很重要。^foo|bar$要么是^foo (开始时的foo),要么是bar$ (最后是bar),比如在fooXYbar上匹配。

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/664504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档