regex - 仅打印以特定数值结尾的行

标签 regex linux bash unix grep

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

我需要 grep 第一列中以 06、12、18 或 00 结尾的所有行。

文件.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 命令不理解“字段”。它只理解模式。由于您的“第一列”是数字后跟空格的模式,因此您可以匹配 that 而不是使用 $:

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

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

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

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

关于regex - 仅打印以特定数值结尾的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47755281/

相关文章:

mysql - 如何查看任何特定 mysql 查询使用的 CPU 和内存?

linux - 有什么方法可以在没有 pg_dump 的情况下迁移 postgresql 数据库吗?

bash - cat 没有写入文件?

linux -/etc/network/if-up.d/中的脚本未在连接上运行

c# - 具有逻辑 AND NOT 功能的正则表达式

regex - 基于字符串中大写/小写和位置的德语元音变音的 Powershell 正则表达式

c# - .NET 测试字符串的数值

regex - 我需要一个正则表达式来匹配以两个特定单词之一结尾的句子

php - 在 Linux 上安装 GD 库和 freetype

linux - awk从列中找到最大值和最小值并存储在其他列中