我的目标是提取包含特定关键字的文本段落。不仅仅是包含关键字的行,而是整个段落。我的文本文件的规则是每个段落都以某种模式开头(例如 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
我的目标是提取包含“关键字”一词的这些段落。例如:
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
我可以使用例如grep 关键字和 -A、-B 或 -C 选项可获取关键字所在行之前和/或之后的恒定行数,但这似乎还不够,因为文本块的开头和结尾取决于分隔符“Pa0”和“\n”。
任何建议grep
或其他工具(例如 awk、sed、perl)会有所帮助。
很简单awk
:
awk '/keyword/' RS="\n\n" ORS="\n\n" input.txt
解释:
通常 awk 是以每行为基础进行操作的,因为记录分隔符的默认值RS
is \n
(一个新行)。通过改变RS
到连续的两个新行(空行),我们可以轻松地在段落的基础上进行操作。
/keyword/
是一个条件,一个正则表达式。由于条件满足后没有任何动作awk
如果它包含,将简单地打印未更改的记录(段落)keyword
.
设置输出记录分隔符ORS
to \n\n
将用空行分隔输出的段落,就像在输入中一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)