在linux中重命名具有不同模式的文件

时间:2015-02-24 16:12:46

标签: linux file-rename

我有这种命名模式的文件:

S_1020_E_1293Person_using_PharmacyBasket.csv
S_1298_E_1365Reading instructions.csv
S_1368_E_1691Person_using_Phone.csv
S_136_E_155Other activity.csv
S_157_E_305Reading instructions.csv
S_1693_E_1850Reading instructions.csv
S_1855_E_1887Other activity.csv
S_1905_E_1985Person_making_Tea.csv
S_2125_E_2236Person_making_Tea.csv
S_23_E_135Other activity.csv
S_2901_E_3058Person_using_Phone.csv
S_3060_E_3085Other activity.csv
S_321_E_387Reading instructions.csv
S_3450_E_3470Other activity.csv
S_3473_E_3499Person_watering_Plant.csv
S_3501_E_3582Other activity.csv
S_392_E_418Other activity.csv

我想以一种方式重命名它们,在第二个数字组之后出现下划线字符,例如S_1368_E_1691Person_using_Phone.csv重命名为S_1368_E_1691_Person_using_Phone.csv 有这样的命令吗?问题是数字的位数是可变的,也是字数。

2 个答案:

答案 0 :(得分:2)

您可以使用接受正则表达式的rename实用程序执行此操作。

rename 's/^(S_\d+_E_\d+)/$1_/' *.csv

这假设您的文件都以“S_digits_E_digits”开头。

答案 1 :(得分:0)

使用perl(在命令行上)和正则表达式来搜索和替换搜索第二个数字组很容易。也许是这样的:

s/^(\D+\d+\D+d+)(.*?)$/\1_\2/