Я получил два ответа. Оба отлично работают.
ПЕРВЫЙ - сделайте несколько проходов (Нил Файман):
Во-первых, добавьте какой-нибудь символ, который больше нигде в файле не встречается, в начало каждой строки месяца. Я использую пулю здесь:
Find: ^\s*[a-z]+ \d{4}$
Replace: •&
Replace all
Дает нам
• Апрель 2020 (на некоторое время до конца месяца будут добавлены индивидуальные выступления.) [Включить аудио] 25 Быть ответственным [включить аудио] 24 В стране неправильного взгляда [включить аудио] 05 Владельцы наших действий [включить аудио ] 04 Богатство и сила [воспроизведение аудио] 03 Умелое сердце [воспроизведение аудио] 02 Стой и размышление [воспроизведение аудио] 01 Зеркало для разума • Март 2020 г. Архив на весь месяц [воспроизведение аудио] 31 Беспокойство [воспроизведение аудио] 30 Положите Сердце другого человека в твоем ...
Затем напишите шаблон для замены первой (если есть) строки [play audio] в каждом месяце:
Find: (?s)(^•\s*([a-z]+) (\d{4})\n[^•]*?)(\[play audio\] (\d\d))
Replace: \1\3-\2-\5
Replace all
Дает нам:
• Апрель 2020 г. (индивидуальные выступления будут добавлены на некоторое время до конца месяца.) 2020-апрель-25 Быть ответственным [включить аудио] 24 В стране неправильного взгляда [включить аудио] 05 Владельцы наших действий [включить аудио ] 04 Богатство и сила [включить аудио] 03 Умелое сердце [включить аудио] 02 Стой и подумать [включить аудио] 01 Зеркало для разума • Март 2020 г. Архив за весь месяц 2020-31 марта-31 Беспокойство [включить аудио] 30 Поместите Сердце другого человека в твоем [включить аудио] 29 Защита через внимательность ...
Теперь просто продолжайте нажимать Cmd-Shift- = несколько раз, каждый раз заменяя первую необработанную строку каждого месяца, пока она не выйдет из строя. (Если у вас не более сотни строк [воспроизведение аудио] в месяц, это займет не более пары минут, т. Е. Гораздо меньше времени, чем потребуется, чтобы найти более разумное решение. Если у вас есть тысяча строк в в месяц вам понадобится другое решение.
Наконец, последний поиск и замена удалит все маркеры, которые вы вставили на первом шаге.
ВТОРОЙ - создание Perl-скрипта для анализа строк (Мэтью Фишер)
Вы можете сделать это с помощью текстового фильтра. Сохраните следующий код в файле под названием «date_prefixer.pl», поместите его в папку текстовых фильтров, затем вернитесь к своему файлу и выберите «Текст» -> «Применить текстовый фильтр - префикс даты» в строке меню.
Что делает сценарий:
1) Перебирает каждую строку в вашем выборе (если он у вас есть) или весь файл (если у вас его нет). 2) Если строка начинается со слова, за которым следует пробел, за которым следует 4-значное число, значение переменной «$ date» устанавливается равным числу, плюс тире, плюс слово плюс еще одно тире. 3) Если строка начинается с «[play audio]», за которым следует пробел, за которым следует двузначное число, текст «[play audio]» заменяется текущим значением «$ date», тогда строка печатается. 4) Если ни одно совпадение не совпадает, ничего не делается и сценарий переходит к следующей строке.
Я установил сценарий, чтобы он делал именно то, что говорит ваш пример. Если вы хотите, чтобы для месяца использовалось соответствующее двузначное число, измените эту строку:
$date = $2 . "-$1-";
to
$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";
}
}
person
Peter Kaufman
schedule
04.05.2020