在 Linux 上显示给定正则表达式的匹配行

在 Linux 上显示给定正则表达式的匹配行

我在我的日志文件中使用了这种符号:

[某事-某事]

有些是必需的,并且长度可变的字符和数字。我的特殊日志文件包含上面解释的字符的行。即

Line 1: DEBUG [AS-kmksdf] Error occured!
Line 2: something somethingg..

我想要获取第 1 行。我的日志文件动态增长,我使用以下命令在屏幕上显示它:

tail -f log.txt

我怎样才能显示那些特殊线条?

我知道我会使用 grep 并且我的正则表达式将是

[[A-Z]*-[A-Z]*]

如何将它们与该命令组合起来。这不起作用:

tail -f log.txt | grep [[A-Z]*-[A-Z]*]

我将 cygwin 与 windows7 一起使用,并且可以在我的 cmd.exe 上运行一些 linux 命令。

答案1

您的正则表达式存在几个问题:

  • 首先,我建议你始终使用开关-P,它允许Perl 兼容正则表达式

    默认情况下,grep使用基本正则表达式,这些符号的使用并不广泛,并且间距不一致。

  • 正则[A-Z]表达式中的括号具有特殊含义。要在 PCRE 中使用文字括号,请用反斜杠将其转义:\[\]

  • 正则表达式区分大小写,除非您设置了-i开关。

  • *方法任何出现次数,包括(0)。您可能希望改用+(任何积极的出现次数)。

  • 总是用双引号将正则表达式括起来,否则 bash 将扩展字符。

因此,以下命令将起作用:

tail -f log.txt | grep -Pi "\[[A-Z]+-[A-Z]+\]"

答案2

tail -f log.txt |grep -E '\[[a-zA-Z]*-[a-zA-Z]*\]'

您可以使用正则表达式测试您的正则表达式。您还应该使用-Eon grep。这不是强制性的,在本例中也不是必需的,但允许您使用扩展的正则表达式。

相关内容