如何使用 GPRename 的正则表达式功能将匹配组重新插入“替换”?

Dav*_*ica 6 regex batch-rename

我一直在使用GPRename来批量重命名文件;这比单独更正每个文件更有效,但似乎仍然比它可能的效率低,主要是因为我不理解所使用的正则表达式语法,或者因为正则表达式实现不完整1

给定以下语法的文件列表:

(01) - title of file1.avi
(02) - title of file2.avi
(03) - title of file3.avi
Run Code Online (Sandbox Code Playgroud)

我尝试使用“替换”(选择正则表达式选项,取消选择区分大小写的选项):

(\(\d{2}\))
Run Code Online (Sandbox Code Playgroud)

然后预览显示(鉴于我尚未指定“替换为”选项):

title of file1.avi
title of file2.avi
title of file3.avi
Run Code Online (Sandbox Code Playgroud)

这很好,很明显正则表达式正在识别正确的组((01))。现在,我希望在“替换为”选项中(使用 JavaScript 语法)使用:

$1
Run Code Online (Sandbox Code Playgroud)

(我也尝试使用'$1',\1'\1'

这只是为了检查我是否可以访问匹配的组,而我似乎不能,正如我想的那样,匹配的组被替换为文字替换字符串。

所以,我的问题是:是否可以匹配一组特定的字符,在这种情况下是括号内的数字,然后将它们插入到替换字符串中?所以:

(01) title of file1.avi
(02) title of file2.avi
(03) title of file3.avi
Run Code Online (Sandbox Code Playgroud)

变成:

01 title of file1.avi
02 title of file2.avi
03 title of file3.avi
Run Code Online (Sandbox Code Playgroud)
  1. 我个人绝对怀疑前者

ish*_*ish 7

不幸的是,您似乎不能;并且这是一个不完整的正则表达式实现有错。

所有GPRename 语言环境翻译末尾的这一行似乎很明显:

msgstr "不能使用带有正则表达式的反向引用
       因为 $1 被认为是 Perl 变量。”

由于您熟悉 Perl 正则表达式,我可以建议您改用出色的rename命令行实用程序吗?

  • 始终先使用-n开关进行预览。
  • 您的正则表达式中有一个错字 - 应该是\((\d{2})\),在转义括号内进行分组。
  • 例子:

    $重命名 -n 's/\((\d{2})\)/$1/' *.avi
    (01) file1.avi 的标题更名为 file1.avi 的 01 标题
    (02) file2.avi的标题更名为file2.avi的02标题
    (03) file3.avi的标题更名为file3.avi的03标题
    
  • rename使用-v(详细)开关调用并删除-n以实际执行重命名。