Imprime o padrão de correspondência de saída até outro padrão corresponder

0

Estou tentando imprimir texto após uma correspondência de padrão até que ele corresponda a outro padrão várias vezes em um arquivo. Eu tentei modificar o script fornecido aqui , mas não conseguiu fazê-lo. por exemplo. O conteúdo de file1.txt

example text
more example
pattern1
important text
very important 
need this too
pattern2
i dont require this
junk text
more junk
pattern1
important text
very important 
need this too
pattern2
junk

Saída esperada

pattern1
important text
very important 
need this too
pattern1
important text
very important 
need this too

alguém pode sugerir a edição?

Obrigado.

    
por Pradyumna Sagar 20.04.2018 / 12:22

1 resposta

1

A correspondência entre linhas entre os padrões, incluindo os limites, é um seletor de intervalo padrão em sed:

sed -n -e '/pattern1/,/pattern2/p' example.txt

Dependendo de como você é crítico em termos de eficiência (o tamanho dos arquivos), provavelmente seria preguiçoso e usaria um segundo passe para excluir os marcadores pattern2:

cat example.txt \
| sed -n -e '/pattern1/,/pattern2/p' \
| sed    -e '/pattern2/d'

(Sim, este é um uso inútil de cat, porque eu prefiro a legibilidade de encadear vários filtros de tubulação sobre a perda de desempenho, e não tenho certeza agora se < example.txt | sed ... | sed ... é obrigatório por POSIX ou apenas uma extensão que acontece de estar presente em bash e zsh.)

    
por 20.04.2018 / 12:32