sed匹配3行模式并删除2

时间:2015-04-10 10:08:59

标签: regex bash sed

我试图匹配3个不同模式的3行,一个接一个地匹配,并且仅使用sed删除第一个和最后一个:

patternABC
patternDEF
patternGHI

我使用这样的东西,当然会删除所有的行,但我需要保留patternDEF并删除只有patternABC和patternGHI。

sed -e '/patternABC/{N;/patternDEF/{N;/patternGHI/d}}'

1 个答案:

答案 0 :(得分:0)

sed -e '/patternABC/{
           N
           /\n.*patternDEF/{
              N
              /.*patternABC.*\(\n.*patternDEF.*\)\n.*patternGHI.*/ {
                 s//\1/
                 }
              }
           }' YourFile
  • 假设3行正在关注,并且您没有像line1 + line1 + line2 + line3
  • 这样的内容
  • s//用于示例,它可以直接集成最后一级模式测试(因此只需要2级模式匹配+ 1个替换)。
  • d无法直接使用,因为它会立即删除整个缓冲区内容,缓冲区通常是当前行,除非您向当前缓冲区添加内容,例如N操作
    • 模式现在你关注正则表达式使用(<pre> abc def ghi </pre>是1行所以这段代码无法工作,因为它需要3行)