Pergunta

Eu estou tentando ter o comando run para extrair um intervalo de datas de um arquivo e imprimi-los

ex: sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / p'

No entanto, eu tenho várias ocorrências de 2009-08-26 no arquivo, eu quero que todos eles para retornar, mas ele só retorna a primeira. É possível ter todo o retorno?

Obrigado!

Foi útil?

Solução

sed -ne '/ ^ 2009/08/20 /, / ^ 2009/08/26 / b e; / ^ 2009/08/26 / b e; d;: e p'

Para explicar: 'e' é um rótulo e se você estiver no intervalo que se ramificam a esse rótulo. Você dá uma segunda chance e você verificar se ele é o fim do intervalo. Se não, apagar a linha.

Outras dicas

A razão pela qual ele retorna apenas o primeiro jogo da data final é que uma gama vai desde a primeira partida do primeiro padrão para o primeiro jogo do segundo padrão (inclusive) e, em seguida, parar de imprimir até que ocorra o primeiro padrão novamente. Se você não tem problema escrevendo o segundo padrão três vezes, você pode usar

sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'

que irá imprimir uma linha se estiver entre data de início (inclusive) e a data final (exclusive) - que é o que o! faz) ou se ele começa com a data final.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top