Linhas de correspondência entre dois padrões usando sed apenas uma vez [duplicado]

1

Dado: sed -e '/pattern1/,/pattern2/!d' file.org

Como posso corresponder a primeira ocorrência das linhas entre pattern1 e pattern2, mas não o resto?

Por exemplo:

pattern1
aaaa
pattern2
pattern1
bbb
pattern

deve produzir: aaa

Soluções de alternativas (usando grep , awk ou qualquer outro) são bem-vindas.

    
por Quora Feans 06.04.2018 / 19:48

1 resposta

1
$ cat input
a
b
c
a
b
c
$ sed -n '/a/,/c/p;/c/q' input
a
b
c

Pesquisa o intervalo a ser impresso e, em seguida, sai depois de ver o primeiro marcador "final".

awk facilita um pouco a exclusão dos pontos inicial e final:

$ awk 'BEGIN { p=0 }  /c/ { p=0; exit } p {print} /a/ { p=1 }' input
b
    
por 06.04.2018 / 19:53