正则表达式与sed,跨多行搜索

我想连接几行,对它们执行正则表达式匹配并打印它们。 我试图用sed来做到这一点。正则表达式与sed,跨多行搜索

即,我使用:

cat add | sed -rn '/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/s/SOME_REGEX/&/p' 

它打印仅在我希望它来连接从FIRST_LINE和LAST_LINE之间的范围内的线,并打印级联如果它匹配SOME_REGEX匹配SOME_REGEX的行。

回答:

当使用'/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/'时,每行仍然是分开处理的,以连接需要使用保持空间的行或N命令将下一行追加到模式空间。这里有一个选项:

cat add | sed -rn '/FIRST_LINE_REGEX/{:a;N;/LAST_LINE_REGEX/{/SOME_REGEX/p;d};ba}' 

注释版本:

cat add | sed -rn '/FIRST_LINE_REGEX/ { # if line matches /FIRST_LINE_REGEX/ 

:a # create label a

N # read next line into pattern space

/LAST_LINE_REGEX/ { # if line matches /LAST_LINE_REGEX/

/SOME_REGEX/p # print if line matches /SOME_REGEX/

d # return to start

}

ba # return to label a

}'

回答:

sed -n '/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/p' add | sed -n '/FIRST_LINE_REGEX/ b check; H; $ b check; b; :check; x; /SOME_REGEX/p'

第二管部件的动力来源于此:https://stackoverflow.com/a/6287105/992834

编辑:修正了当SOME_REGEX是在之间。

以上是 正则表达式与sed,跨多行搜索 的全部内容, 来源链接: utcz.com/qa/263044.html

回到顶部