Diga sed para substituir dois pontos que não são seguidos por mais dois-pontos:
sed 's/:\([^:]\+\)$/,/'
Recentemente eu baixei alguns arquivos SRT mal formatados, tendo o formato de horário confuso como
HH:MM:SS:XXX
considerando que deve ser
HH:MM:SS,XXX
O principal problema agora é substituir o terceiro cólon por uma vírgula em todas as linhas de tempo formatadas como
HH:MM:SS,XXX --> HH:MM:SS,XX
Alguém pode sugerir um script sed / awk para corrigir esse problema em todo o arquivo? Eu tentei
sed 's/:/,/3;s/:/,/5' file
mas parece que não funcionou
Editar: Respondeu minha própria pergunta, tendo esquecido tudo sobre backreferences
sed -E "s/([0-9][0-9])(:)([0-9][0-9][0-9])/,/g"
Diga sed para substituir dois pontos que não são seguidos por mais dois-pontos:
sed 's/:\([^:]\+\)$/,/'
A substituição da terceira e sexta ocorrência de cólon em linhas contendo -->
funciona aqui:
sed '/-->/ { s/:/,/6; s/:/,/3 }'
Faça o inverso para que a ordem de ocorrência seja mantida.
Substitua qualquer coisa que corresponda a dois pontos + dígitos + fim de linha no comando + o que foi encontrado
sed 's/:([0-9]*)$/,/' file