显示从特殊行开始直到特殊行的正则表达式,用于 Linux tail 命令

显示从特殊行开始直到特殊行的正则表达式,用于 Linux tail 命令

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

[某事-某事]

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

Line 1: 14:40:45,107 DEBUG [AS-kmksdf] Error occured!
Line 2: something somethingg..
Line 3: 14:40:45,108 DEBUG Some other errors

我想获取第 1 行和第 2 行(因为错误在第 2 行继续)。我的日志文件动态增长,我使用以下命令在屏幕上显示它:

tail -f log.txt

我怎样才能显示以我的特殊行开头的行,直到它得到一个具有数字 number : number number : number number 的新行,一个或多个长度数字(这是小时和逗号分隔的错误代码数字)

(我认为寻找数字,数字:可能就足够了)

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

这个问题与以下内容相关:这个问题

答案1

命令

tail -f log.txt | awk '{if($1~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9]+/){if($0~/\[[A-Za-z]+-[A-Za-z]+\]/){MATCH=1}else{MATCH=0}}if(MATCH){print $0}}'

怎么运行的

  • awk逐行处理管道输出。

  • 如果行的第一个字段(以空格分隔并用 表示$1)与正则表达式 匹配[0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9]+,则 的值MATCH会发生变化:

    • \[[A-Za-z]+-[A-Za-z]+\]如果出现该模式,MATCH则设置为1(truthy)。

    • 如果模式\[[A-Za-z]+-[A-Za-z]+\]没有出现,MATCH则设置为0(falsy)。

  • 最后,如果MATCH为真,print $0则打印整行(用 表示$0)。

    因为MATCH当且仅当以时间戳开头的最后一行包含模式时才是真值[something-something],所以这会产生所需的输出。

相关内容