awk - 如何使用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 注释。
解决方案
使用您发布的示例,您无需 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
如果这不是您所需要的,那么编辑您的问题以提供更好的示例,包括不起作用的情况。
推荐阅读
- angular - 反序列化对象正在覆盖所有值
- node.js - Monkey Patch 在发送响应之前重新调整响应
- spring - '参数索引超出范围(2 > 参数数量,即 1)。对于两个参数语句
- c# - 如何在 C# (Forms) 中将屏幕截图保存为 pdf?
- msbuild - 将所有项目升级到 .Net core 2.2 后,Azure DevOps 上的 Nuget 还原任务失败
- linux - 使用 sed 替换前后有非字母数字字符的字符串
- jquery - Bootstrap 4 响应模式 ASP.NET MVC 5 - 如何在不单击按钮的情况下显示
- php - 在 Syfmony 中注册特定的表单类型 - 编译器通行证
- spring - 使用cron在Spring中安排周期性的反应任务?
- tensorflow - 更新变量时分布式张量流中的原子性