正则表达式使用重命名实用程序(基于 perl)替换文件名中带有数字的字符

正则表达式使用重命名实用程序(基于 perl)替换文件名中带有数字的字符

我想重命名具有以下格式的文件:

somethingblabla15T06:58_31+0000somethingblabla.bla

新名称应该是

somethingblabla15T06:58:31+0000somethingblabla.bla

因此_数字内的 应替换为:

我想使用基于 perl 的重命名命令行工具来执行此操作。

我认为这将是正则表达式的一部分:

's/[0-9](_)[0-9]/:'

我无法让它工作。我认为这也应该被转义或类似操作。

答案1

尝试:

rename 's/([0-9])_([0-9])/$1:$2/'

例子

考虑包含此文件的目录:

$ ls som*
somethingblabla15T06:58_31+0000somethingblabla.bla

让我们运行rename然后ls再次运行:

$ rename 's/([0-9])_([0-9])/$1:$2/' s*
$ ls som*
somethingblabla15T06:58:31+0000somethingblabla.bla

怎么运行的

([0-9])_([0-9])匹配一个数字,后跟一个下划线,后跟一个数字。由于括号,每个数字都保存在一个组中。替换文本是指向第一个保存的组和第二个保存的组的$1:$2位置。$1$2

答案2

不使用捕获组来完成工作的另一种方法:

rename 's/(?<=\d)_(?=\d)/:/' something*

解释:

s/              # substitute
    (?<=\d)       # positive lookbehind, make sure we have a digit before
    _             # underscore
    (?=\d)        # positive lookahead, make sure we have a digit after
/               # with
    :             # colon
/               # end subst.

相关内容