在linux日志文件中特定事件后获取行

时间:2012-04-28 22:24:02

标签: linux bash grep

我正在尝试从syslog文件(/ var / log / messages)获取linux中附加的USB信息。

为此我读取日志文件并获取信息。现在我做的是我读取syslog文件并尝试找到“找到新USB设备”的Last occurrence(新附加的usb)。然后我试着读取接下来的16行以获取USB信息(尺寸,序列,制造商等)。

目前我正在使用以下语法:

grep -A 20 -e 'New USB device found' /var/log/messages | tail -n 16 > usb_detail

但是这种语法在一种情况下失败了。如果在“New USB ...”之后有25行,那么我将获得最后16行,然后我将跳过所需的实际信息。如果“New USB ...”之后只有16行,那么它将正常工作,我将获得所需的信息。

所以我想要的是在最后一次发现“找到新USB设备”后立即获得16行。不是“找到新USB设备”后的最后16行。

如果我的问题不明确,请告诉我。在此先感谢您的时间。

1 个答案:

答案 0 :(得分:1)

有什么问题
fgrep -A 16 'New USB device found' /var/log/messages | tail -n 16

我在日志中看到的16行总是足够的(我最长的是10行)。如果grep少于16行,它将截断那里,并且在新设备之前你会得到一些无用的行,但grep在使用上下文时在匹配块之间打印--