【问题标题】:Get Lines after specific occurrence in linux log file在linux日志文件中特定出现后获取行
【发布时间】:2012-04-28 22:24:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux bash grep


    【解决方案1】:

    怎么了

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2013-06-20
      相关资源
      最近更新 更多