使用正则表达式时出现“grep: Unmatched [”错误

Joh*_*ino 5 grep quoting regular-expression

我正在尝试找到与此类似的模式:

tail -n 100000 gateway.log | grep -B10 -A10 'Nov 22 11:13:56 Received Packet from [10.50.98.68'
Run Code Online (Sandbox Code Playgroud)

其中“11:13:56”可以是任何时间。

这就是我想出的:

tail -n 100000 gateway.log | grep -B10 -A10 'Nov 22 [0-9]:[0-9]:[0-9] Received Packet from [10.50.98.68'
Run Code Online (Sandbox Code Playgroud)

当它说“无与伦比的[”时,我不确定它指的是什么。这部分 "[0-9]:[0-9]:[0-9]" 应该是正则表达式。这部分“[10.50.98.68”应该是一个字符串。

jw0*_*013 7

在 grep 正则表达式中,[是一个特殊字符。对于文字[,你需要反斜线逃避它,就像这样:\[

请注意,整个 ofNov 22 [0-9]: ... [10.50.98.68是一个正则表达式。你不能只是指着它说“这部分是一个正则表达式,这部分应该是一个文字字符串”,并期望grep能够读懂你的想法。这就是为什么您需要对作为您想要匹配的文字字符串一部分的任何特殊字符进行转义的原因。


不相关,但[0-9]正则表达式中的每次出现只匹配一个字符。此外,.是一个特殊字符,也需要转义。您的正则表达式可能需要如下内容:

^Nov 22 [0-9][0-9]:[0-9][0-9]:[0-9][0-9] Received Packet from \[10\.50\.98\.68
Run Code Online (Sandbox Code Playgroud)