msoliver
(usa Debian)
Enviado em 12/04/2021 - 16:56h
rommulo9 escreveu:
Olá pessoal.
Pouco tempo atrás postei aqui uma pergunta semelhante, e por falta de internet (área rural) não finalizei o tópico a tempo.
Desta vez estou refazendo a pergunta, porém de forma mais abrangente.
Eu tenho uma lista em texto simples (txt), listando diversos vídeos de meu interesse (Youtube, Vimeo, etc). Essa lista contém as durações dos vídeos no formato hh:mm:ss, e datas por extenso, porém dessa forma: •5 de out. de 2020
Sou leigo em RegEx e no uso do "sed", por isso peço ajuda para substituir os dois pontos das durações por apóstrofes, e ainda inserir espaços, traços simples e parêntesis, conforme o exemplo abaixo:
Texto original (lista.txt):
5:11
30:39
1:08:15
12:04:37
Nesse exemplo temos as durações de vídeos: 5 min e 11 s, 30 min e 39 s, 1 hora, 8 min e 15 s, e por último 12 horas, 4 min e 37 s
Meu desejo é que com as substituições desejadas, fiquem dessa forma:
(5’11 - p).
(30’39 - p).
(1’08’15 - p).
(12’04’37 - p).
Observe que também quero iniciar cada linha com 1 espaço em branco: " (5'11 - p)."
Já usei o comando abaixo, conforme minha pergunta em outro post:
sed -ri “s/^([0-9]{2})(:)([0-9]{2})$/ (\1’\3 - p)./” lista.txt
Mas nesse caso alterou apenas o “30:39” para " (30’39 - p)."
Já que minha lista não contém um formato padrão de horas para "00:05:11" no caso do primeiro exemplo, ficarei satisfeito se me passarem comandos distintos para alterar cada conjunto de durações: m:ss (5:11), mm:ss (05:11), h:mm:ss (0:05:11) e hh:mm:ss (00:05:11)
E agora, outro comando para alterar formato de datas:
"•5 de out. de 2020" para " 05-10-2020" (em lugar do "•" entra um espaço em branco)
"•15 de jan. de 2021" para " 15-01-2021"
Se é que tem RegEx para interpretar os meses abreviados dessa forma: "jan." "fev." "mar." até "dez."
Gratidão aos que me ajudarem!
Boa tarde rommulo9.
Vamos por partes....
Veja se é dessa forma que quer a duração:
sed -r "s/^.:..(:..)?/0&/;s/:/'/g;s/^.*$/ (& - p)/" lista.txt
(05'11 - p)
(30'39 - p)
(01'08'15 - p)
(12'04'37 - p)
COMO FUNCIONA:
s/^.:..(:..)?/0&/; => Se tem só um digito no início, coloca um "0"
s/:/'/g; => Troca : por '
s/^.*$/ (& - p)/ => formata, casa tudo, e altera para " (& -p)"; Onde & é o que casou
---------------------------------------------------------------------------------
Dica para alterar o formato de datas
Formate "•5 de out. de 2020"
Para uma entrada válida do comando "date"....
E utilize o mesmo, para obter o formato desejado.
Ou
Case o nome do mês e troque por número:
Ex:
echo "5 out. 2021"|sed 's/ out. /-10-/'
Obviamente, deve ter o comando de substituição para todos os meses.....
sed '....s/ out. /-10-/;...'
Faça uso de um laço e o comando date para "montar" a ReGex.
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando:
lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.