2015-04-03 66 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