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

获取linux日志文件中特定事件后的行,linux,bash,grep,Linux,Bash,Grep,我正在尝试从syslog文件(/var/log/messages)获取linux中连接的USB的信息 为此,我读取日志文件并获取信息。现在我要做的是读取syslog文件,并尝试查找“找到新usb设备”的最后一次出现(新连接的usb)。然后我试着阅读接下来的16行,以获得USB信息(大小、序列号、制造商等) 目前,我正在使用以下语法: grep -A 20 -e 'New USB device found' /var/log/messages | tail -n 16 > usb_detai

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

为此,我读取日志文件并获取信息。现在我要做的是读取syslog文件,并尝试查找“找到新usb设备”的最后一次出现(新连接的usb)。然后我试着阅读接下来的16行,以获得USB信息(大小、序列号、制造商等)

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

grep -A 20 -e 'New USB device found' /var/log/messages | tail -n 16 > usb_detail
但是这种语法在一种情况下失败了。如果在“New USB…”之后有25行,那么我将得到最后16行,然后我将跳过所需的实际信息。如果在“新USB…”之后只有16行,那么它将工作正常,我将获得所需的信息

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

如果我的问题不清楚,请告诉我。提前感谢您抽出时间

你怎么了

fgrep -A 16 'New USB device found' /var/log/messages | tail -n 16
对于我在日志中看到的内容,16行就足够了(最长的是10行)。如果grep少于16行,它将在那里截断,在新设备之前会有几行无用的行,但是grep在使用上下文时会在匹配块之间打印
--