Como imprimir o texto entre a última ocorrência de um par de padrões?

0

Estou tentando imprimir as linhas entre a última ocorrência de dois padrões em outro arquivo usando sed. Por exemplo, se o arquivo1 contiver o seguinte:

StartPattern
1
2
3
EndPattern
4
5
StartPattern
6
7
8
EndPattern
9
10
StartPattern
11
12
13
EndPattern
14
15

Eu gostaria que a saída fosse:

11
12
13

Como posso fazer isso com sed?

    
por A. B 26.09.2017 / 18:00

2 respostas

0

Com um único processo awk :

awk '/StartPattern/{ f=1;r=""; next }f && /EndPattern/{f=0}
     f{ r=(r=="")? $0: r RS $0 }END{ print r }' file > output

output conteúdo do arquivo:

11
12
13

Solução alternativa tac + awk :

tac file | awk '/StartPattern/{exit}/EndPattern/{f=1;next}f' | tac > output
    
por 26.09.2017 / 18:05
0
cat file |sed -n 'H; /^StartPattern/h; ${g;p;}' |sed -e '1d' -e '/EndPattern/q' |sed '$ d'
    
por 26.09.2017 / 19:37