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 sed
de1para5e 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 1
até a próxima linha depois daquela que contém 5
(não incluindo aquela). Se não houver nenhuma linha 5
após aquela que contém 1
, ela será impressa da primeira linha 1
até 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 sed
que irá parar de ler depois de encontrar um 5 na mesma linha ou após a primeira linha que contém 1
.