我想使用正則表達式重命名文件。使用正則表達式重命名命令不起作用
例如:取代在使用以下命令文件N_Mod10_m.bdf
和N_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 *
但是這是不工作。
我想使用正則表達式重命名文件。使用正則表達式重命名命令不起作用
例如:取代在使用以下命令文件N_Mod10_m.bdf
和N_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 '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
這不起作用。即使簡單的替換也無法正常工作,如使用命令重命名's/xyz/xya /'*將xyz_d.txt重命名爲xya_d.txt,但替代方法是將xyz xya *重命名爲正在工作。 – Manju 2015-04-03 09:54:23
也許'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
沒有它centOS .. – Manju 2015-04-03 11:23:58
你缺少收盤'''在'rename'命令。 – fedorqui 2015-04-03 09:26:23
此外,如果您正在執行'$ 1_temp',bash將查找變量'1_temp'。說'$ 1' +'_temp',比如'$ {1} _temp'。 – fedorqui 2015-04-03 09:40:10
你需要使用非貪婪模式:'(。*?)',我想這就是你要找的:'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