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

Mar*_*ról 5 regex unix sed

我想连接几行,对它们执行正则表达式匹配并打印它们.我试着用sed做到这一点.

即,我用过:

cat add | sed -rn '/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/s/SOME_REGEX/&/p'
Run Code Online (Sandbox Code Playgroud)

它只打印与SOME_REGEX匹配的行,而我希望它连接FIRST_LINE和LAST_LINE之间的行,并打印串联(如果它与SOME_REGEX匹配).

And*_*ark 9

当使用'/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/'每一行仍然是单独处理时,要连接行,您需要使用保持空间或N命令将下一行附加到模式空间.这是一个选项:

cat add | sed -rn '/FIRST_LINE_REGEX/{:a;N;/LAST_LINE_REGEX/{/SOME_REGEX/p;d};ba}'
Run Code Online (Sandbox Code Playgroud)

评论版:

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
}'
Run Code Online (Sandbox Code Playgroud)