抱歉看似常见问题,但其他帖子的答案对我不起作用。我试图搜索的日志格式如下:
Jul 24 23:11:08 TG-12345 gateway [words] Tools 987654321 Join request
我想要查看/ var / etc / messages中找到的所有日期实例的日志,让我们说'7月24日'在这种情况下,和' 987654321'。这样做的正确指示是什么?谢谢。
编辑:虽然没有必要,但如果你知道如何在同一个搜索中投入一个时间范围(小时,而不是日期),那就太棒了;但我确实至少需要日期和工具#工作。再次感谢。
答案 0 :(得分:3)
只需使用该命令两次:
grep 'Jul 24' <filename> | grep '987654321'
答案 1 :(得分:1)
要搜索范围,您可以使用sed
,如下所示:
sed -n '/Jul 24/,/Jul 27/p' file
这将打印包含Jul 24
和Jul 27
的行之间的所有行(包括)。 -n
标志禁止未明确打印的输出(此处带有p
命令)。 /pattern1/,/pattern2/
是regex address,我们使用它选择第一个和第二个模式之间的所有行(在本例中为文字字符串)。
不限日期,您可以指定小时/分钟/等:
sed -n '/Jul 24 22:/,/Jul 24 23:/p' file
确保模式出现在文件中,否则sed
将无法匹配块的开头/结尾(因为它是字面匹配,而不是实际的日期范围匹配)。例如,如果您对结束模式过于具体,例如Jul 24 23:59:59
,并且该值实际上从未出现在文件中,sed
将很乐意继续打印直到文件末尾。
完成sed
“预选”之后,您可以grep
为您的其他模式输出sed -n '/Jul 24/,/Jul 27/p' file | grep 987654321
,如下所示:
sed
实际上,您可以使用单个sed -n '/Jul 24/,/Jul 27/ { /987654321/p }' file
命令执行此操作:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.app_logo)
.setContentTitle("My notification")
.setContentText("Hello World!");
如果你愿意的话。
答案 2 :(得分:0)
grep 'Jul 24.*987654321' /var/log/messages
这里的秘密是使用metacharacter .
,这意味着&#34;任何角色&#34;和量词*
含义&#34; 0或更多&#34;。有关其他元字符的更多信息,请阅读regular expressions。
对于时间范围,您可以使用范围。从7月10日到7月29日,这将包含987654321 -
grep 'Jul [12].*987654321' /var/log/messages
比这更复杂的事情需要涉及算术比较而不是模式匹配。我经常使用awk。例如,这将从6月12日到6月18日以及7月20日到7月25日从每个压缩和未压缩的消息日志文件中获取包含987654321的所有内容 -
zcat -f /var/log/messages* | grep 987654321 | awk '($1 == "Jun" && $2 >= 12 && $3 <= 18) || ($1 == "Jul" && $2 >= 20 && $3 <= 25)'
答案 3 :(得分:0)
我通常只是这样做:
grep 'Jul 24' /var/etc/messages | grep 987654321
答案 4 :(得分:0)
尝试使用awk。
openpyxl
说明:在一行中查找字符串“Jul 24”和编号“987654321”,因此&amp;&amp;条件将确保它们都在一条线上。如果它们出现在一行上,那么它将打印该行(虽然打印不是在这里写的,但awk适用于条件/动作的方法,当没有动作时,它将默认打印行。)