Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用Awk匹配日期时间戳_Regex_Awk - Fatal编程技术网

Regex 使用Awk匹配日期时间戳

Regex 使用Awk匹配日期时间戳,regex,awk,Regex,Awk,我在第二列的日志文件中有格式为HH:MM:SS:mmm的时间戳条目 eg片段 15-01-2017 21:15:10:266 15-01-2017 21:15:10:389 15-01-2017 21:15:15:266 15-01-2017 21:15:12:124 15-01-2017 21:15:12:266 15-01-2017 21:15:15:266 15-01-2017 21:15:20:266 我正在努力 awk '$2 == "21:15:[0-9]{2}:[0-9]{3}"

我在第二列的日志文件中有格式为HH:MM:SS:mmm的时间戳条目

eg片段

15-01-2017 21:15:10:266
15-01-2017 21:15:10:389
15-01-2017 21:15:15:266
15-01-2017 21:15:12:124
15-01-2017 21:15:12:266
15-01-2017 21:15:15:266
15-01-2017 21:15:20:266
我正在努力

awk '$2 == "21:15:[0-9]{2}:[0-9]{3}"' 

匹配21:15的所有条目,但这似乎不起作用。为什么不起作用?如何使其工作?

您使用的是
$2==regexp
。但是要在
awk
中检查regexp,您需要使用
~
,否则
=
会逐字检查字符串:

awk '$2 ~ /^21:15:[0-9]{2}:[0-9]{3}/' file
这将返回:

15-01-2017 21:15:10:266
15-01-2017 21:15:10:389
15-01-2017 21:15:15:266
15-01-2017 21:15:12:124
15-01-2017 21:15:12:266
15-01-2017 21:15:15:266
15-01-2017 21:15:20:266
从:

正则表达式也可以用于匹配表达式。这些表达式允许您指定要匹配的字符串;它不必是整个当前输入记录。两个运算符“~”和“!~”执行正则表达式比较。使用这些运算符的表达式可以用作模式,也可以在if、while、for和do语句中使用。(请参阅语句。)例如,如果表达式exp(作为字符串)与regexp匹配,则以下为真:

exp ~ /regexp/
也来自:

字符串比较和正则表达式比较非常不同。例如:

x == "foo"
值为1,如果变量x正好是“foo”,则为true。相比之下:

x ~ /foo/
如果x包含“foo”,则值为1,例如“哦,我真傻!”


好的,那么您的意思是$n==(其中n是一列)只能用于匹配精确的字符串/值?@user3369871。查看我的编辑和更多参考。我明白了,这是说不应该有类似exp==/regex/的东西,它必须始终是exp~/regex/?@user3369871 yes的语法。我认为这是有道理的,因此当您使用
==
时,awk不必加载正则表达式解释器并坚持使用文本,因此更加灵活。好的,那么taht是否也意味着动态正则表达式不能用于awk列搜索?