awk - grep/awk/sed 有状态行匹配
问题描述
我有一个日志文件,其中包含本身可以拆分为多行的条目,我想找到这些条目的所有实例。
例如:
AAA normal line
BBB normal line
XXX important line
important line continuation 1
important line continuation 2
BBB normal line
normal line continuation 1
AAA normal line
XXX important line
important line continuation 1
important line continuation 2
important line continuation 3
AAA normal line
所有条目都以代码开头(AAA、BBB、XXX 等)。以代码 XXX 开头的行及其相关的续行是我感兴趣的行。续行以空格开头,并且可以有任意数量的续行。续行之后的行可以以任何代码开头。
我认为这是一种“有状态”匹配(尽管它可能无法通过这种方式解决)......即:我想要匹配模式 XXX 的行,然后所有紧跟在以空格开头的行(直到他们没有) .
在跟踪日志文件的同时,我该如何 grep、sed 或 awk?
更新:示例期望结果:
XXX important line
important line continuation 1
important line continuation 2
XXX important line
important line continuation 1
important line continuation 2
important line continuation 3
解决方案
这awk
应该有效:
awk '/^[^ \t]/{p = ($1 == "XXX")} p' file
XXX important line
important line continuation 1
important line continuation 2
XXX important line
important line continuation 1
important line continuation 2
important line continuation 3
命令解释:
/^[^ \t]/
: 条件,如果一行不以空格或制表符开头{
: 启动动作块p = ($1 == "XXX")
:如果第一列设置p
为 ,则设置为。1
XXX
0
}
: 结束块p
:如果p==1
则打印行
p
1
当我们找到时将设置为$1 == XXX
,我们将继续打印行直到再次p
变为0
。
推荐阅读
- node.js - 如何使用 GKE 和 kubernetes/client-node 通过 K8S API 进行身份验证?
- spring-boot - 我们如何在单个服务器中部署多个 mico 服务
- c# - IndexBuilder 和 ForNpgsqlHasComment
- php - 如何优化数据库查询并减少对数据的请求数
- asterisk - 带有 ChanSpy() 的星号背景音乐
- vb.net - OleDbException 是来自子句的未处理语法错误
- spring-boot - Spring-boot应用程序中的Logback,两次初始化同一个appender
- sql - SQL Server:变量窗口函数
- scala - 遍历数据框的列和分区,并在分区列的基础上保存数据框
- selinux - SElinux:如何使用上下文类型来批准或阻止访问?