在多个模式之间使用awk或sed搜索,但只打印最后匹配的模式

时间:2018-04-02 01:09:27

标签: awk sed

使用awk或sed如何选择两种不同标记图案之间的线条?可能有多个标记有这些图案的部分,但只想要打印最后一个部分。

For example: Suppose the file contains:
abc
def1
ghi1
jkl1
mno
abc
def2
ghi2
jkl2
mno
pqr
stu

起始模式是abc,结束模式是mno所以,我需要输出为:

def2
ghi2
jkl2

不知道怎么做到这一点。

2 个答案:

答案 0 :(得分:1)

您能否请关注awk并告诉我这是否对您有所帮助。

awk '/mno/{flag="";next} /abc/{val="";flag=1;next} flag{val=val?val ORS $0:$0} END{print val}'  Input_file

解决方案第二:

awk '/abc/{val=""}/abc/,/mno/{if($0~/mno/||$0~/abc/){next};val=val?val ORS $0:$0}END{print val}'  Input_file

答案 1 :(得分:1)

使用gnu sed

sed '
  $bB
  :C
  /^abc$/!d
  :A
  $bB
  N
  /\nabc$/s/.*\n//
  /\nmno$/!bA
  s/[^\n]*\n\(.*\)\n[^\n]*/\1/
  h
  N
  s/.*\n//
  bC
  :B
  g
  /./!d
' infile