Как я могу использовать функцию регулярных выражений в GPRename для повторной вставки соответствующей группы в «замену»?

Я использовал GPRename для пакетного переименования файлов; это гораздо более эффективно, чем индивидуальное исправление каждого файла, но все же кажется менее эффективным, чем могло бы быть, в первую очередь потому, что либо я не понимаю используемый синтаксис регулярного выражения, либо потому, что реализация регулярного выражения неполна1

список файлов следующего синтаксиса:

(01) - title of file1.avi
(02) - title of file2.avi
(03) - title of file3.avi

Я попытался использовать команду «заменить» (с выбранной опцией регулярного выражения, опция с учетом регистра отменена):

(\(\d{2}\))

Предварительный просмотр затем показывает (учитывая, что я еще не указал опцию «заменить на»):

title of file1.avi
title of file2.avi
title of file3.avi

Что здорово, очевидно, регулярное выражение идентифицирует правильную группу ((01)). Теперь то, что я надеялся сделать (используя синтаксис JavaScript) в опции «заменить на», это использовать:

$1

(я также пытался использовать '$1', \1 и '\1')

Это было просто для того, чтобы проверить, что я могу получить доступ к сопоставленной группе, и, кажется, я не могу, сопоставленная группа, как я полагаю, могла бы быть заменена литеральной строкой замены.

Итак, мой вопрос: возможно ли сопоставить определенную группу символов, в данном случае цифры в скобках, а затем вставить их в строку замены? Поэтому:

(01) title of file1.avi
(02) title of file2.avi
(03) title of file3.avi

становится:

01 title of file1.avi
02 title of file2.avi
03 title of file3.avi

  1. Я абсолютно подозреваю бывшего , лично.
6
задан 10 September 2012 в 17:10

2 ответа

К сожалению, кажется, что Вы не можете; и это это - неполная regex реализация в отказе.

Эта строка в конце весь переводы локали GPRename , кажется, делает это очевидным:

msgid "Backreferences with Regular expression cannot be use
       as $1 is considered a Perl variable."

, Так как Вы знакомы с регулярными выражениями Perl, я могу рекомендовать использовать превосходное rename утилита командной строки вместо этого?

  • Всегда используют -n переключатель сначала для получения предварительного просмотра.
  • существует опечатка в Вашем regex - это должно быть \((\d{2})\) с группировкой в завершенных круглых скобках.
  • Пример:

    $ rename -n 's/\((\d{2})\)/$1/' *.avi
    (01) title of file1.avi renamed as 01 title of file1.avi
    (02) title of file2.avi renamed as 02 title of file2.avi
    (03) title of file3.avi renamed as 03 title of file3.avi
    
  • Вызов rename с -v (подробный) переключатель и отбрасывание -n для фактического выполнения переименования.
7
ответ дан 10 September 2012 в 17:10

В GPRename можно использовать Регулярное выражение как это:

    Name of file 012.txt
    Regular Expression: Name of file (\d).txt
    Replace: NewFileName_1.txt

Где:

    1 = like $1

Можно попробовать его. Я использовал \1 или \1$, но это получает меня \или \$ как простой текст. Это странно, но это так.

0
ответ дан 23 November 2019 в 07:45

Другие вопросы по тегам:

Похожие вопросы: