Я получил два ответа. Оба отлично работают.
FIRST - сделать несколько проходов (Нил Фейман):
Сначала добавьте в начало строки каждого месяца какой-либо символ, которого нет в другом месте файла. Я использую здесь маркер:
Find: ^\s*[a-z]+ \d{4}$
Replace: •&
Replace all
Дает нам
• Апрель 2020 года (отдельные разговоры будут добавлены до конца месяца.) [Воспроизвести аудио] 25 Быть ответственным [воспроизвести аудио] 24 В стране неправильного представления [воспроизвести аудио] 05 Владельцы наших действий [воспроизвести аудио] 04 Богатство и сила [воспроизвести аудио] 03 Умелое сердце [воспроизвести аудио] 02 Остановись и подумай [воспроизведи аудио] 01 A Mirror for the Mind • Март 2020 Полный месяц zip [play audio] 31 Worry [play audio] 30 Поместите сердце другого человека в свое ...
Далее, напишите шаблон для замены первого (если любая) строка [play audio] в каждом месяце:
Find: (?s)(^•\s*([a-z]+) (\d{4})\n[^•]*?)(\[play audio\] (\d\d))
Replace: \1\3-\2-\5
Replace all
Дает нам:
• Апрель 2020 года (отдельные разговоры будут добавлены до конца месяца на некоторое время.) 2020 -April-25 Быть ответственным [воспроизвести аудио] 24 В стране несправедливости Посмотреть [воспроизвести аудио] 05 Владельцы наших действий [воспроизвести аудио] 04 Богатство и сила [воспроизвести аудио] 03 Умелое сердце [воспроизвести аудио] 02 Остановись и подумай [play audio] 01 Зеркало для разума • Март 2020 Полный месяц zip 2020-March-31 Worry [play audio] 30 Положите сердце другого человека в свое [play audio] 29 Защита через осознанность ...
Теперь просто продолжайте нажимать Cmd-Shift- = несколько раз, заменяя первая необработанная строка каждого месяца каждый раз, пока не произойдет сбой. (Если у вас не более ста строк [воспроизведения аудио] в месяц, это займет не более пары минут - т.е. гораздо меньше времени, чем потребовалось бы для поиска более разумного решения. Если у вас есть тысяча строк в через месяц вам понадобится другое решение.
Наконец, при последнем поиске и замене будут удалены все маркеры, которые вы вставили в первый шаг.
ВТОРОЙ - создайте perl скрипт для разбора строк (Мэтью Фишер)
Вы можете сделать это с помощью текстового фильтра. Сохраните следующий код в файле с именем что-то вроде «date_prefixer.pl», поместите его в папку текстовых фильтров, затем go вернитесь к своему файлу и выберите «Текст» -> «Применить текстовый фильтр» - date_prefixer из меню.
Что делает скрипт:
1) Пропускает каждую строку в выбранном вами случае (если у вас есть один) или весь файл (если вы этого не сделаете). 2) Если строка начинается со слова, за которым следует пробел, за которым следует число 4-ди git, значение переменной «$ date» устанавливается равным числу плюс плюс sh плюс слово, плюс еще один да sh. 3) Если строка начинается с «[play audio]», за которым следует пробел, за которым следует число с двумя числами git, текст «[play audio]» заменяется текущим значением «$ date», затем строка печатается. 4) Если ни одно совпадение не совпадает, то ничего не делается, и сценарий переходит к следующей строке.
Я настроил сценарий так, чтобы он точно выполнял то, что говорит ваш пример. Если вы хотите, чтобы в месяце использовалось соответствующее число из двух чисел git, измените эту строку:
$date = $2 . "-$1-";
на
$date = $2 . "-$month{$1}-";
#!/usr/bin/perl
$month{"January"} = "01";
$month{"February"} = "02";
$month{"March"} = "03";
$month{"April"} = "04";
$month{"May"} = "05";
$month{"June"} = "06";
$month{"July"} = "07";
$month{"August"} = "08";
$month{"September"} = "09";
$month{"October"} = "10";
$month{"November"} = "11";
$month{"December"} = "12";
while (<>) {
if ( $_ =~ /^([^ ]+) ([0-9]{4})/ ) {
$date = $2 . "-$1-";
}
elsif ( $_ =~ /^\[Play Audio\] ([0-9]{2}.+)/i ) {
print $date . $1 . "\n";
}
}