微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 仅以某些数值结束的打印行

我有一个由空格分隔符和两列组成的CSV文件.

我需要grep任何以第一列中的06,12,18或00结尾的行.

file.txt的

2017121106 22.9
2017121109 19.4
2017121112 17.2
2017121115 9999.0
2017121118 9999.0
2017121121 9999.0
2017121200 9999.0
2017121203 9999.0
2017121206 16.3
2017121209 13.1
2017121212 8.8
2017121215 8.1
2017121218 10.5
2017121221 8.6

试图代码

egrep '(00|06|12|18)$' file.txt

预期产出:

2017121106 22.9
2017121112 17.2
2017121118 9999.0
2017121200 9999.0
2017121206 16.3
2017121212 8.8
2017121218 10.5

在终端中运行此代码时,我得到一个空的返回.

我究竟做错了什么?

解决方法:

所以…… grep命令不理解“字段”.它只了解模式.由于您的“第一列”是数字后跟空格的模式,因此您需要匹配而不是使用$:

$egrep '^[0-9]+(00|06|12|18) ' file.txt

请注意带括号的表达式末尾的空格字符.初始[0-9]已到位,以便我们可以将此正则表达式锚定到行的开头,这可确保我们匹配第一个“字段”.

一个更好的解决方案可能是使用awk,它确实理解字段:

$awk '$1~/(00|06|12|18)$/' file.txt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐