sed linhas após o jogo e antes do próximo jogo

3

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

Por exemplo, minha entrada aparece abaixo.

1
2
3

5
6

e preciso sed de 1 para 5 e, na minha saída, preciso incluir 1 , mas não quero inclua * 5 * e as linhas restantes.

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

OBSERVAÇÃO: vi o link referenciado que parece uma duplicata da minha pergunta, intitulado: Mostra apenas texto entre dois padrões de correspondência , mas não responde à minha pergunta. As respostas não incluem uma maneira de lidar se a segunda correspondência não estiver no arquivo.

    
por Benas Gasiūnas 15.10.2014 / 15:26

1 resposta

4

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

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

Observe que ele imprimirá todas as seções correspondentes.

Se há apenas uma seção, ou você está interessado apenas na primeira, outra abordagem poderia ser:

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

Isso significa que sed parará de ler depois de encontrar um 5 na mesma linha ou depois da primeira linha que contiver 1 .

    
por 15.10.2014 / 15:29

Tags