我在第二栏的日志文件中输入时间戳,格式为HH:MM:SS:mmm
例如摘录
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匹配所有条目,但这似乎不起作用。为什么它不起作用?我怎样才能使它发挥作用?
答案 0 :(得分:1)
您正在使用$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
来自GNU awk user's guide on 3.1 How to Use Regular Expressions:
正则表达式也可用于匹配表达式。这些表达式允许您指定要匹配的字符串;它不一定是整个当前的输入记录。两个运算符'〜'和'!〜'执行正则表达式比较。使用这些运算符的表达式可以用作模式,或者用于if,while,for和do语句。 (请参阅语句。)例如,如果表达式exp(作为字符串)与regexp匹配,则以下情况属实:
exp ~ /regexp/
同样来自6.3.2.2 Comparison Operators:
字符串比较和正则表达式比较非常不同。例如:
x == "foo"
具有值1,或者如果变量x恰好是'foo'则为真。相比之下:
如果x包含'foo',x ~ /foo/
的值为1,例如"哦,我真是个傻瓜!"。