![在 Linux 上显示给定正则表达式的匹配行](https://linux22.com/image/1319188/%E5%9C%A8%20Linux%20%E4%B8%8A%E6%98%BE%E7%A4%BA%E7%BB%99%E5%AE%9A%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%8C%B9%E9%85%8D%E8%A1%8C.png)
我在我的日志文件中使用了这种符号:
[某事-某事]
有些是必需的,并且长度可变的字符和数字。我的特殊日志文件包含上面解释的字符的行。即
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]*\]'
您可以使用正则表达式测试您的正则表达式。您还应该使用-E
on grep
。这不是强制性的,在本例中也不是必需的,但允许您使用扩展的正则表达式。