3

我正在尝试从 syslog file(/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 行,然后我会跳过所需的实际信息。如果“New USB ...”之后只有 16 行,那么它会正常工作,我会得到所需的信息。

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

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

4

1 回答 1

1

有什么问题

fgrep -A 16 'New USB device found' /var/log/messages | tail -n 16

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

于 2012-04-28T22:34:46.553 回答