linux - 在 Linux 系统上定位文件中的内容

标签 linux grep

我正在尝试在 Linux 系统上的日志文件中搜索关键字。

如果日志文件的结构出现在下面(它没有,但这是一个很好的例子)并且假设我想找到单词“Hello” 和 hello 上面的日期和时间戳以及所有其他行都在开始下一条记录的换行符中。

这将如何实现。

我唯一能想到的就是 grep Hello -B 1 logfile.log。 这当然会让我在匹配内容之前得到一行,但是新行之后的行呢?还尝试了 grep Hello -B 1 -A 1 logfile.log

不确定如何获得不同的行。请指教。提前致谢。

[日志文件的结构]

2015-01-01
Hello|
Bob |
Billy|
Tommy|

2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

2015-01-01
Tchau|
Bob |
Billy|
Tommy|
Judy|
Jerry|
Dwight|
Phil|

[期望的输出]

2015-01-01
Hello|
Bob |
Billy|
Tommy|


2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

最佳答案

最简单的方法是使用gnu awk 并通过将RS 设置为空来将数据分成 block 组。

awk -vRS= '/Hello/' ORS="\n\n" file
2015-01-01
Hello|
Bob |
Billy|
Tommy|

2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

如果组之间的空间不重要:

awk -vRS= '/Hello/' file
2015-01-01
Hello|
Bob |
Billy|
Tommy|
2015-01-01
Hello|
Bob |
Billy|
Tommy|
Judy|
Richard|
Paul|

关于linux - 在 Linux 系统上定位文件中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27934910/

相关文章:

linux - 内核是否不够聪明,无法为已读取的同一文件的 block 删除一些缓存?

linux - Mercurial hg 克隆错误 - "abort: error: Name or service not known"

c++ - 调用 execl 时找不到 Grep

grep - 为什么 grep 只在退出后才打印?

bash - grep 数字范围

linux - 如何在亚马逊 Linux 上安装 openjdk "1.8.0_20-b26"?

linux - 自动终止消耗过多内存或在 Linux 上停止的进程

linux - 输出是否有字符限制

macos - 如何使用 macos grep 将文件视为巨大的字符串?

regex - 使用 Sed/awk/grep 或任何其他工具在 Linux 环境中提取子字符串