sed linhas após a partida e antes da próxima partida

sed linhas após a partida e antes da próxima partida

Como obter todas as linhas após uma palavra correspondente até a próxima palavra correspondente diferente?

Por exemplo, minha entrada é semelhante a abaixo.

1
2
3

5
6

e eu preciso sedde1para5e na minha saída preciso incluir1mas não quero incluir *5* e as linhas restantes.

Se meu arquivo não contiver nenhum5, preciso ter as linhas restantes até o fim.

OBSERVAÇÃO:Vi o link referenciado que parece uma duplicata da minha pergunta, intitulado:Mostrar apenas texto entre 2 padrões correspondentesmas isso não responde à minha pergunta. As respostas não incluíam uma maneira de lidar se a segunda correspondência não estivesse no arquivo.

Responder1

sed '/1/,/5/!d;/5/d'

Retornaria as linhas começando de uma linha que contém 1até a próxima linha depois daquela que contém 5(não incluindo aquela). Se não houver nenhuma linha 5após aquela que contém 1, ela será impressa da primeira linha 1até o final do arquivo.

Observe que todas as seções correspondentes serão impressas.

Se houver apenas uma seção ou você estiver interessado apenas na primeira, outra abordagem poderia ser:

sed -n '/1/,$!d; /5/q; p'

Isso significa sedque irá parar de ler depois de encontrar um 5 na mesma linha ou após a primeira linha que contém 1.

informação relacionada