首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash中的正则表达式以匹配多个条件

bash中的正则表达式以匹配多个条件
EN

Stack Overflow用户
提问于 2022-04-06 22:17:05
回答 2查看 117关注 0票数 0

我想在bash中实现一个正则表达式,它允许我在dataset上验证一系列特征。现附上一份样本如下:

代码语言:javascript
运行
复制
id, date of birth, grade, explusion, serious misdemeanor
123,2005-01-01,5.36,1,1
582,1999-05-12,8.51,0,1
9274,2001-25-12,9.65,0,0
21,2006-14-05,0.53,4,1

身份证只需有3位数字,出生日期低于2000年,最低年级平均为5.60,小数位数第二位为0,至少有一次驱逐或严重不当行为。

执行正则表达式的结果应该是:

代码语言:javascript
运行
复制
582, 1999-05-12, 8.51, 0, 1

我尝试实现以下正则表达式,但它没有给出任何结果。

代码语言:javascript
运行
复制
grep -E "^\d{0,3},[0-2][0-9][0-9][0-9].*,[1-5].[0-5][1-9],[1-9],[1-9]$"

有什么想法吗?

EN

Stack Overflow用户

发布于 2022-04-06 22:25:30

正则表达式不理解数值,当然也不理解布尔逻辑。它只知道短信。为此,您需要使用实际的编程语言,如Awk或Perl。

下面是一个例子:

代码语言:javascript
运行
复制
$ perl -l -a -F, -E'say if length($F[0])>3 || $F[2] < 5.60' foo.txt
123,2005-01-01,5.36,1,1
9274,2001-25-12,9.65,0,0
21,2006-14-05,0.53,4,1

perl的调用将逗号上的字段拆分,然后如果第一列的长度超过3,或者第三列的值小于5.60,则打印该行。

这只是一个起点,但这是前进的方向。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71774216

复制
相关文章

相似问题

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