【发布时间】:2021-04-08 06:34:43
【问题描述】:
我有以下几行:
[37125.641615] CPU3 is up
[37125.643067] ACPI: Waking up from system sleep state S3
[37125.683813] ACPI: EC: interrupt unblocked
[37125.684233] pci 0000:01:00.0: Enabling HDA controller
[37125.714885] ACPI: EC: event unblocked
[37125.714931] usb usb2: root hub lost power or was reset
[37125.714935] usb usb4: root hub lost power or was reset
[37125.715046] ath: phy0: ASPM enabled: 0x42
[37125.715389] usb usb1: root hub lost power or was reset
[37125.716515] usb usb3: root hub lost power or was reset
以下是我要匹配的内容(我希望匹配以 ACPI 开头并以第一个 USB 出现为分隔,USB 出现不得匹配)
ACPI: Waking up from system sleep state S3
[37125.683813] ACPI: EC: interrupt unblocked
[37125.684233] pci 0000:01:00.0: Enabling HDA controller
[37125.714885] ACPI: EC: event unblocked
[37125.714931]
我尝试了以下命令:
grep -izoP 'ACPI.*(?=usb)' ~/tmp/dmesg_grep_test
=> 不匹配,为什么?
然后我使用多行 grep 和正向前瞻尝试了这个命令:
grep -izoP '(?s)ACPI.*(?=usb)' ~/tmp/dmesg_grep_test
ACPI: Waking up from system sleep state S3
[37125.683813] ACPI: EC: interrupt unblocked
[37125.684233] pci 0000:01:00.0: Enabling HDA controller
[37125.714885] ACPI: EC: event unblocked
[37125.714931] usb usb2: root hub lost power or was reset
[37125.714935] usb usb4: root hub lost power or was reset
[37125.715046] ath: phy0: ASPM enabled: 0x42
[37125.715389] usb usb1: root hub lost power or was reset
[37125.716515] usb
结果更好...但它与最后一次出现的“usb”匹配结束。我希望它匹配停止“第一次”出现“usb”。 什么是正确的 grep 命令?
PS:我用一个使用 grep 工具的简单示例来问这个问题。事实上,我正在尝试使用 pdfgrep 在一些 pdf 文件中找到类似的模式(多行 + 正向前瞻)。这就是答案需要使用 grep 工具。 谢谢
【问题讨论】: