我在我的日志文件中使用了这种符号:
[某事-某事]
有些是必需的,并且长度可变的字符和数字。我的特殊日志文件包含上面解释的字符的行。即
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]
,所以这会产生所需的输出。