linux - grep 一个“文本”并打印文本前后的所有行。每个日志会话由 2 个空行分隔
问题描述
1
1
1
1
Text
11
1
1
1
上面的文本可以在任何地方,因此 grep -C 无济于事。我已经尝试过使用 AWK 但我想使用 grep
zgrep -C25 "Text" engine.*.log.gz
不起作用,因为文本可能出现在任何地方
我知道该awk
选项,但它不适用于 .gz 文件我必须将其转换为一个漫长的过程
awk -v RS= '/Text/' engine.*.log.gz
解决方案
只需以简单、明显、健壮、可移植的方式进行:
zcat engine.*.log.gz | awk -v RS= '/Text/{print; exit}'
这也应该非常有效,因为在找到第一个退出SIGPIPE
时zcat
获得的.awk
Text
zcat
或者如果Text
可以在输入中出现多次并且您希望所有关联的记录输出:
zcat engine.*.log.gz | awk -v RS= -v ORS='\n\n' '/Text/'
推荐阅读
- protractor - 获取“等待量角器与页面同步时出错:“angularJS 可测试性和 angular 可测试性都未定义......”
- python - 如何使用 Python 计算图像的能量?
- angular - 多页 PWA 和 SPA pwa 有什么区别?
- mysql - 记录从特定表中删除,每次留下完全相同数量的记录 (54)
- lua - 如何在 CoronaSDK 中实现计步器
- c++-cli - 指向成员的指针对托管类无效
- html - div表的边框间距问题
- unit-testing - 如何检查 Java 8 Stream 是否关闭?
- php - codeigniter hook post并获取数据进行安全处理(SQL注入)
- r - 从 GRIB 文件中获取特定位置的数据