2015-04-03 63 views
1

我想使用正则表达式重命名文件。使用正则表达式重命名命令不起作用

例如:取代在使用以下命令文件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 * 

但是这是不工作。

+0

你缺少收盘'''在'rename'命令。 – fedorqui 2015-04-03 09:26:23

+0

此外,如果您正在执行'$ 1_temp',bash将查找变量'1_temp'。说'$ 1' +'_temp',比如'$ {1} _temp'。 – fedorqui 2015-04-03 09:40:10

+0

你需要使用非贪婪模式:'(。*?)',我想这就是你要找的:'rename's /(.*?Mod [0-9] [0-9]) (。*?\。bdf)/ $ 1_temp $ 2'*'。看看http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html和http://unix.stackexchange.com/questions/19807/renaming-files-要具备的,小写的扩展与 - 重命名。 – 2015-04-03 09:45:10

回答

0

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

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

看看Rename Multiple Files in a Shell PromptRenaming 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 
+0

这不起作用。即使简单的替换也无法正常工作,如使用命令重命名's/xyz/xya /'*将xyz_d.txt重命名为xya_d.txt,但替代方法是将xyz xya *重命名为正在工作。 – Manju 2015-04-03 09:54:23

+0

也许'rename's /(.*?Mod [0-9] [0-9])(。*?\。bdf)\ $ 1_temp $ 2 //'*'会适合您吗? (适应http://serverfault.com/questions/5685/renaming-files-in-linux-with-a-regex)。此外,请参阅此处的注释:“在Arch Linux上,这是perl重命名”。你是Arch Linux吗? – 2015-04-03 10:00:05

+0

没有它centOS .. – Manju 2015-04-03 11:23:58