使用正则表达式重命名命令不起作用

Posted

技术标签:

【中文标题】使用正则表达式重命名命令不起作用【英文标题】:Rename command with regular expression not working 【发布时间】:2015-06-08 09:11:09 【问题描述】:

我想使用正则表达式重命名文件。

例如:使用以下命令将文件N_Mod10_m.bdfN_Mod11_n.bdf 中的模式Mod[0-9][0-9] 替换为Mod[0-9][0-9]_temp

rename 's/\(.*Mod[0-9][0-9]\)\(.*\.bdf\)/$1_temp$2 *

但这不起作用。

【问题讨论】:

您在rename 命令中缺少结束' 另外,如果你在做$1_temp,bash 会寻找变量1_temp。说,$1 + _temp,说$1_temp 你需要使用非贪婪模式:(.*?),我猜,这就是你要找的:rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/$1_temp$2' *。看看cyberciti.biz/tips/… 和unix.stackexchange.com/questions/19807/…。 【参考方案1】:

您需要使用非贪婪模式:(.*?)。另外,添加缺少的报价'

我猜,这就是你要找的东西:rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/$1_temp$2' *

看看Rename Multiple Files in a Shell Prompt和Renaming files to have lower case extensions with rename。

对于 CentOS,您可以将 _temp 插入到文件名中,如下所示:

for i in *; do j=`echo $i | sed -r 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/\1_temp\2/g'`; mv "$i" "$j"; done

【讨论】:

这不起作用。即使是简单的替换也不起作用,例如使用命令 rename 's/xyz/xya/' * 将 xyz_d.txt 重命名为 xya_d.txt 但另一种方法是重命名 xyz xya * 是有效的。 也许rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)\$1_temp$2//' * 对你有用? (改编自serverfault.com/questions/5685/…)。另外,请参阅那里的评论:“在 Arch Linux 上,这是 perl-rename”。你的是 Arch Linux 吗? 请试试我的更新。如果仍然不起作用,请尝试转义圆括号和反斜杠: for i in *;做 j=`回声 $i | sed 's/\(.*?Mod[0-9][0-9]\)\(.*?\\.bdf)/\1_temp\2/g'`; mv "$i" "$j";完成.

以上是关于使用正则表达式重命名命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式重命名文件名

使用正则表达式重命名文件 - Linux

正则表达式批量重命名 OS X 终端中的文件

在linux中使用正则表达式重命名文件

使用 python 重命名文件 - 正则表达式

linux下怎么批量重命名这些文件