[英]Print lines between two patterns through sed/AWK when there is at least one line between them
[英]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.