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

问题描述 投票:0回答:1

我有一个大文件,以字符串的形式存储在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.

linux bash awk sed
1个回答
1
投票

gawk 拯救!

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

magicstring
kkkkkkkk
magicstring

定义定界符作为记录分隔符,如果记录与魔法字符串匹配,则打印记录。


1
投票

在每个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
© www.soinside.com 2019 - 2024. All rights reserved.