【发布时间】:2018-01-29 06:59:44
【问题描述】:
我正在使用 trilead ssh2 建立 ssh 连接并在之前每 5 分钟解析一次日志文件。
我正在使用这种语法:-
grep '29/Jan/2018:[0-0][6-6]:[1-2][6-1]' /root/nohup.out>/tmp/nohup.txt
基本上,我正在构建一个 android 应用程序,它将每隔 5 分钟解析一次日志文件并将其存储到 /tmp/nohup.txt 中,然后下载并解析它以查找异常并向用户显示这些异常通知等。
String parsingCommand="grep"+" ' "+day2+"/"+month2+"/"+year2+":"+"["+hour2/10+"-"+hour1/10+"]"+"["+小时2%10+"-"+小时1%10+"]"+":"+"["+分钟2/10+"-"+分钟1/10+"]"+"["+分钟2%10+"- "+minute1%10+"]"+" ' "+"/root/nohup.out"+">"+"/tmp/nohup.txt";这里 minute1 = 从服务器获取的当前分钟 & minute2= 分钟减少了 5 分钟
grep '29/Jan/2018:[0-0][6-6]:[1-2][6-1]' /root/nohup.out>/tmp/nohup.txt
在这种情况下,分钟间隔是 16-21。
我认为我没有使用正确的正则表达式。因为
grep '29/Jan/2018:[0-0][6-6]:[1-2][1-6]' /root/nohup.out>/tmp/nohup.txt
它的工作。
任何帮助将不胜感激。 尽管 stackoverflow 中已经有很多答案:-
https://superuser.com/questions/439688/how-to-grep-a-log-file-within-a-specific-time-period
【问题讨论】:
-
为什么使用 sed 而不是 grep。试试这个 sed -n '/2018-01-29 08:00:00/,/2018-01-29 08:02:00/p' example.log 来获取最后 2 分钟的日志。由于您在 Android 中使用它,您可以执行 newDate() 并从中减去 5 分钟,将其传递给 sed 命令,其中 param1 作为较早日期,param2 当前日期。您可以使用格式化程序根据您的应用程序在日志中使用的模式对其进行格式化。注意* 在对时间进行任何操作或格式化时,请始终使用 date.getTime()。
-
我也尝试过使用 sed,但日志文件不包含 /2018-01-29 08:00:00 日期 如果 sed -n '/2018-01-29 08:00,sed 现在将显示数据: 00/,/2018-01-29 08:02:00/p' 。在 sed 的情况下,它似乎有第一个字段,即 2018-01-29 08:00:00 强制性的,并且必须存在于日志文件中,并且不包括最后一个字段。在我的情况下,第一个字段可能存在也可能不存在。