linux下的rename是有两个版本的,一个是C语言版本,一个是Perl语言版本,如何判断当前是哪个版本:
输入
man rename
看到第一行是:
RENAME(1) Linux Programmer’s Manual RENAME(1)
这个就是C语言版本的,而如果出现:
RENAME(1) Perl Programmers Reference Guide RENAME(1)
则是Perl版本的了
C语言版本格式:rename 原字符串 新字符串 文件名
example:当前目录下存在两个文件:a_01、a_02,若需要将文件名中的a替换为b,其他部分保持不变则应当键入
rename a b a_*
代码中最后一个参数代表以a_开头的所有文件
之前一直用这种方法做实验一直不成功,所以上网查询了下,再回去查看了下实验平台所使用的是Perl语言的版本,然后才恍然大悟。下面介绍Perl语言版本的用法。
Perl语言版本格式:rename 's/原字符串/新字符串/' 文件名
example:仍然是刚刚那两个文件:a_01、a_02,若需要将文件名中的a替换为b,其他部分保持不变则应当键入
rename 's/a/b/' a_*
Perl版本还有另外一种用法,通过rename 'y/a-z/A-Z/' 文件名来翻转文件名的大小写。
example:比如刚刚那两个文件:a_01、a_02,若需要将文件名中的a翻转为A,则应当键入
rename 'y/a-z/A-Z/' a_*
当然不管是哪种方法都支持使用通配符以及正则表达式匹配,例如现在有5个文件file_1,file_2,file_3,file_4,file_5
将五个文件名中的file改成hello:
rename 's/f.*e/hello/' file_?
其中.是正则表达式中匹配除换行符以外的任意字符,*表示重复0次到多次,f.*e就代表以f开头e结尾的字符串(中间不管多少个字符),?是通配符表示可代替单个字符, 值得一提的是*在通配符中表示可代替多个字符
关于更多正则表达式的用法请参考正则表达式