首页 > 解决方案 > 如何使用bash脚本提取连续模式

问题描述

我尝试使用 awk、grep 和 sed 根据以下输出解析连续模式,但结果为空。只有其中一种模式有效。

awk '/^[0-9]/ && /OAA-/' file.txt 和 _grep -E '^[0-9].*ORA-' file.txt

下面的输入

    2021-04-27T05:30:13.292507-04:00
    OCC(3):
    OCC(3):DB initialized.
    OAA-06512: at "PATCH", line 001
    2021-05-27T05:30:13.292507-04:00
    OAA-06513: at "PATCH", line 002
    OAA-06514: at "PATCH", line 003
    2021-06-27T05:30:13.292507-04:00
    This is the empty string.

预期产出

2021-04-27T05:30:13.292507-04:00
OAA-06512: at "PATCH", line 001

2021-05-27T05:30:13.292507-04:00
OAA-06513: at "PATCH", line 002
OAA-06514: at "PATCH", line 003

可以提供语法来根据预期的输出解析连续模式,如日期后跟 OAA 注释。

标签: awksedgrep

解决方案


使用您发布的示例,您无需 grep 即可执行任何操作:

$ awk -v RS= -F'\n' '{print $1 ORS $NF}' file
2021-04-27T05:30:13.292507-04:00
OAA-06512: at "PATCH", line 001
2021-05-27T05:30:13.292507-04:00
OAA-06513: at "PATCH", line 002

如果这不是您所需要的,那么编辑您的问题以提供更好的示例,包括不起作用的情况。


推荐阅读