Я пытаюсь исправить текстовый файл с субтитрами (.srt), содержащий некорректные данные, с помощью однострочного сценария ruby.Файл выглядит так:
53
00:03:52,835 --> 00:03:54,835
Boss?... BOSS?!
54
00:03:54,845 --> 00:03:56,990
55
00:0 --> 00:03:58,490
Go!
I want the 55 stanza to look like this:
55
00:03:56,490 --> 00:03:58,490
Go!
Где первая метка времени берется из второй, но с вычтенными 2 секундами.
Вот моя попытка, которая не работает:
ruby -pi.bak -e 'gsub(/(\d{2}):(\d) --> (\d{2}):(\d{2}):(\d{2}),(\d{3})/, "#{$3}:#{$4}:#{$5},#{$6} --> #{$3}:#{$4}:#{$5.to_i - 2},#{$6}")' *.srt
РЕДАКТИРОВАТЬ
Таким образом, как указали респонденты, ruby 1.9.2 не поддерживает доступ к захватам регулярных выражений через синтаксис $ 1, $ 2 и т. Д.
Исправление, с которым я закончил, было переключением обратно на ruby 1.8.x, использованием gsub с блоком, как предложено @mu, и использованием магии Time.utc / strftime, предложенной @ jonas.
Вот окончательное решение (в моей системе / usr / bin / ruby равно 1.8.6):
/usr/bin/ruby -pi.bak -e 'gsub(/(\d{2}):(\d) --> (\d{2}):(\d{2}):(\d{2}),(\d{3})/) {"#{(Time.utc(1970,1,1, $3,$4,$5) - 2).strftime("%H:%M:%S")},#{$6} --> #{$3}:#{$4}:#{$5},#{$6}"}' *.srt
Сейчас я смотрю фильм с правильно отформатированными субтитрами.Спасибо, ребята:)