shell – 仅当第3个模式存在时,SED删除(包括)2个模式

我会保持这个简短.我想使用sed删除文件中的文本集.基本上这是我的一个例子:

textbefore
PATTERN 1
  text1
    PATTERN 3
  text2
PATTERN 2
PATTERN 1
  text3
   text4
  text5
PATTERN 2
textafter

我想要发生的是PATTERN 1到PATTERN 2(包括),但只有它在两者之间包含PATTERN3.

这基本上是我想看到的:

textbefore
PATTERN 1
  text3
   text4
  text5
PATTERN 2
textafter

任何帮助,将不胜感激

最佳答案 至少与GNU sed一起使用.

sed '/PATTERN 1/{:a;/PATTERN 2/bb;N;ba;:b;/PATTERN 3/d;}' file

评论:

#!/usr/bin/sed
/PATTERN 1/ {        # when start pattern is seen
  :a
  /PATTERN 2/ bb     # goto "b" if end pattern seen
  N                  # append next line to pattern space
  ba                 # and goto "a"
  :b
  /PATTERN 3/ d      # if this "block" contains patt, delete
}
点赞