Недавно я скачал несколько плохо отформатированных файлов SRT, в которых формат времени испорчен как

HH:MM:SS:XXX

тогда как это должно быть

HH:MM:SS,XXX

Основная проблема теперь заключается в замене третьего двоеточия запятой в каждой строке синхронизации, отформатированной как

HH:MM:SS,XXX --> HH:MM:SS,XX

Может кто-нибудь предложить сценарий sed/awk, чтобы исправить эту проблему во всем файле? Я попробовал

sed 's/:/,/3;s/:/,/5' file

но это не сработало

Редактировать: ответил на мой собственный вопрос, забыв все о обратных ссылках

sed -E "s/([0-9][0-9])(:)([0-9][0-9][0-9])/\1,\3/g" 

3 ответа3

1

Скажите sed заменить двоеточие, за которым не следует больше двоеточий:

sed 's/:\([^:]\+\)$/,\1/'
0

Замена третьего и шестого вхождения двоеточия в строках, содержащих --> работает здесь:

sed '/-->/ { s/:/,/6; s/:/,/3 }'

Сделайте это в обратном порядке, чтобы сохранить порядок вхождения.

0

Замените все, что соответствует двоеточию + цифры + конец строки, в команду + что было найдено

sed  's/:([0-9]*)$/,\1/' file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .