我有一个大文件,以字符串的形式存储在bash变量中,我需要提取两个相同单词之间的所有行。但我也需要检查这些行之间是否至少有一个出现了 magicstring
. 下面是一个例子。
abc
xxxxxxxx
yyyyyyyy
abc
magicstring
kkkkkkkk
magicstring
abc
mmmmmmmm
nnnnnnnn
我正在寻找的是以下内容。
magicstring
kkkkkkkk
magicstring
两个相同的词总是 abc
但使用 sed、awk 甚至参数扩展,我怎么能准确地知道我需要的是 magicstring
在这些行文中至少包含一次?
我假设我不知道在哪一节中 magicstring
是包含的,因为它是一个大文件.EDIT : 另外。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