Grep包含特定关键字的文本的整个段落

Kyr*_* P. 3 awk grep text paragraph

我的目标是提取包含特定关键字的文本段落.不只是包含关键字的行,而是整个段落.对我的文本文件强加的规则是每个段落都以某种模式(例如Pa0)开头,该模式仅在段落开头的整个文本中使用.每个段落以新行字符结尾.

例如,假设我有以下文字:

Pa0 
This is the first paragraph bla bla bla
This is another line in the same paragraph bla bla 
This is a third line bla bla 

Pa0
This is the second paragraph bla bla bla
Second line bla bla My keyword is here!
bla bla bla 
bla 

Pa0
Hey, third paragraph bla bla bla!
bla bla 

Pa0
keyword keyword
keyword
Another line! bla 
Run Code Online (Sandbox Code Playgroud)

我的目标是提取包含"关键字"一词的这些段落.例如:

Pa0
This is the second paragraph bla bla bla
Second line bla bla My keyword is here!
bla bla bla 
bla 

Pa0
keyword keyword
keyword
Another line! bla 
Run Code Online (Sandbox Code Playgroud)

我可以使用例如grep作为关键字和-A,-B或-C选项在关键字所在的行之前和/或之后获得恒定数量的行,但这似乎不够,因为它的开头和结尾文本块取决于分隔符"Pa0"和"\n".

任何建议grep或其他工具(例如awk,sed,perl)都会有所帮助.

hek*_*mgl 8

这很简单awk:

awk '/keyword/' RS="\n\n" ORS="\n\n" input.txt
Run Code Online (Sandbox Code Playgroud)

说明:

通常awk按行进行操作,因为记录分隔符的默认值RS是\n(单个新行).通过按RS顺序更改为两个新行(空行),我们可以轻松地在段落的基础上操作.

/keyword/是一个条件,一个正则表达式.由于条件awk只是打印未更改的记录(段落),如果它包含,则没有动作keyword.

设置输出记录分隔符ORS来\n\n将一个空行输出的段落分开,就像在输入.