我有一个由空格分隔符和两列组成的 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/