繁体   English   中英

提取两个模式之间的所有行,至少包含一个字符串的出现

[英]Extract all lines between two patterns, containing at least one occurence of one string

我有一个大文件存储在 bash 变量中作为字符串,我需要提取两个相同单词之间的所有行。 但我还需要检查这些行之间是否至少出现了一次magicstring 这是一个例子:

abc
xxxxxxxx
yyyyyyyy

abc
magicstring
kkkkkkkk
magicstring

abc
mmmmmmmm
nnnnnnnn

我正在寻找的是以下内容:

magicstring
kkkkkkkk
magicstring

两个相同的词总是abc ,但是使用 sed、awk 甚至参数扩展,我怎么能精确地知道我需要在这些行中至少包含一次的单词magicstring

我假设我不知道包含magicstring的部分,因为它是一个大文件。 编辑:此外, magicstring仅在一个部分中仅出现一次或多次。

例如,使用 sed ,我会得到这样的所有行: sed '/abc/,/abc/{//!d}' <<<($myFileInVar)但我不知道要精确地需要magicstring

gawk的救援!

$ awk -v RS='(^|\n)abc\n' '/magicstring/' file

magicstring
kkkkkkkk
magicstring

将分隔符定义为记录分隔符,如果它与魔术字符串匹配则打印记录。

在每个 UNIX 框上的任何 shell 中使用任何 awk:

$ awk -v RS= -v ORS='\n\n' '/magicstring/' file
abc
magicstring
kkkkkkkk
magicstring

$ awk -v RS= -v ORS='\n\n' '/magicstring/{sub(/^[^\n]+\n/,""); print}' file
magicstring
kkkkkkkk
magicstring

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM