在单独的行上过滤日志输出

在单独的行上过滤日志输出

我在目录中执行了递归 grep 来查找所有匹配的文件,如下所示

grep -ER "match_string1|match_string2" /path/to/dir/

我得到的输出是:

/path/to/dir/timestamp.log:match_string1
/path/to/dir/timestamp.log:match_string2
/path/to/dir/timestamp.log:match_string2

其中match_string1代表模型# 其中match_string2代表测试结果

我想合并这些行,以便我可以说当模型#和测试结果匹配特定标准时然后计数

注意:可以将两个 match_string2 与 match_string1 放在同一行

我期望的示例输出:

/path/to/dir/timestamp.log:match_string1; /path/to/dir/timestamp.log:match_string2; /path/to/dir/timestamp.log:match_string2

感谢您的帮助

答案1

sed '/match_string1/{
     :1
     N
     /\n.*match_string2/s/\n/; /
     t1
     P
     D
                     }'

当脚本遇到行时,match_string1将下一行添加到模式中,并检查该添加的行中是否有,match_string2如果是,则它们替换newline 符号;并添加下一行进行检查。如果没有match_string2(因此尚未进行替换),脚本将打印第一行并从第二行开始开始处理。

相关内容