首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个相同模式之间的文件中提取内容

从两个相同模式之间的文件中提取内容
EN

Stack Overflow用户
提问于 2016-11-24 11:10:05
回答 1查看 69关注 0票数 1

我有一个日志文件,需要属于特定类型日志的部分。它可以是多行的。

我不能在这里直接发布日志文件,但它的格式如下:

代码语言:javascript
复制
<date-format> Thread-MESSAGE1 random-message
line 1
line 2
line 3
line 4
<date-format> Thread-MESSAGE1 random-message2
line 5
<date-format> Thread-MESSAGE2 random-message3
line 6
line 7
line 8
line 9
<date-format> Thread-MESSAGE3 random-message4
<date-format> Thread-MESSAGE1 random-message5
<date-format> Thread-MESSAGE1 random-message6
line 10
line 11
<date-format> Thread-MESSAGE7 random-message7
<date-format> Thread-MESSAGE8 random-message9
<date-format> Thread-MESSAGE9 random-message10
<date-format> Thread-MESSAGE1 random-message11 

我需要的输出是:

代码语言:javascript
复制
<date-format> Thread-MESSAGE1 random-message
line 1
line 2
line 3
line 4
<date-format> Thread-MESSAGE1 random-message2
line 5
<date-format> Thread-MESSAGE1 random-message5
<date-format> Thread-MESSAGE1 random-message6
line 10
line 11
<date-format> Thread-MESSAGE1 random-message11 

我试着使用sed,但是使用‘Thread 1’作为开始模式和结束模式,如果有两个连续的带有'MESSAGE1‘键的日志,则不能工作。

我曾想过使用Perl预先使用负查找(这是有效的),但不幸的是,我不能使用Perl,而且'sed‘和'awk’都不支持在模式中提前进行负查找。

最近,我尝试使用以下“sed”模式:

代码语言:javascript
复制
tac source_file.log | sed -n '{/<date-format> Thread-/!H; /<date-format> Thread-/{H;d;x} /<date-format> Thread-MESSAGE1/p; d;}' > test.log

这样做的目的是后来反转test.log的输出,但是为了在'Thread-/{H;d;x}‘之后添加大括号,我将得到’命令后的额外字符‘错误。还有更好的选择吗?或者,我是否可以使用sed中的大括号对命令进行分组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 11:18:14

您可以使用这个awk命令:

代码语言:javascript
复制
awk -v kw='Thread-MESSAGE1' '$2 ~ /^Thread-/ {p = ($2 == kw)} p' file

<date-format> Thread-MESSAGE1 random-message
line 1
line 2
line 3
line 4
<date-format> Thread-MESSAGE1 random-message2
line 5
<date-format> Thread-MESSAGE1 random-message5
<date-format> Thread-MESSAGE1 random-message6
line 10
line 11
<date-format> Thread-MESSAGE1 random-message11

如果这不能锻炼,那么我建议你发布更真实的样本数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40784871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档