Use o grupo de captura Sed Regex no método de substituição de seção

2

Eu tenho uma lista de nomes de arquivos com timestamp no seguinte formato:

cat files
  • .. 201807010112 .log
  • .. 201807020112 .log
  • .. 201807022359 .log
  • .. 201807030112 .log
  • .. 201807010412 .log

Eu preciso de um determinado intervalo e, para fazer isso, gostaria de usar o SED.

sed -n '/201807010112/,/201807030112/p' 

Foi minha primeira tentativa, mas o sed trata a hora e o minuto de forma estranha e, para encurtar a história, é difícil entender esse formato corretamente.

Eu posso estar entrando no mato, mas para resolver isso, decidi converter o formato para algo que o SED entende.

cat files | sed -e "s/\([0-9]\{12\}\}/$(date -f '%Y%m%d%H%M' )/g"

Meu problema é que não consigo usar o resultado da correspondência \ 1 no bloco de conversão de datas.

Existe uma maneira de fazer isso ou, melhor ainda, uma maneira melhor de obter o intervalo de datas?

    
por Proximo 06.08.2018 / 23:55

1 resposta

0

Então eu decidi não usar a função date para transformar o formulário e usar mais o SED!

cat files

  • ..._201807010112.log

  • ..._201807010132.log

  • ..._201807010152.log

  • ..._201807010202.log

A data está no formato YYYYmmddHHSS e eu a transformei no seguinte formato:

AAAA-mm-dd HH: SS usando esta expressão regex com SED.

cat files | sed -e 's/\(_[0-9]\{4\}\)\([0-9]\{2\}\) \
\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\) \/-- :/g'

Em seguida, a partir daí, foi fácil especificar o intervalo com base na data.

  | sed -n '/2018-07-01 01:20/,/2018-07-02 02:01/p'

A maior lição para mim foi conhecer o formato adequado de data e hora para utilizar a opção de padrão de alcance do SED.

    
por 07.08.2018 / 03:59