Regex 使用Awk匹配日期时间戳
我在第二列的日志文件中有格式为HH:MM:SS:mmm的时间戳条目 eg片段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}"
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列搜索?