我是正则表达式的新手,并且正在尝试使用正则表达式来重命名一些文件。我在用rename
(这个) 重命名所述文件。下面是一个示例命令。
$ rename -n 's/\(feat.//' *.mp3
(-n
选项 = 试运行)
输出:
'103 Flume - Left Alone (feat. Jezzabell Doran).mp3'
would be renamed to '103 Flume - Left Alone Jezzabell Doran).mp3'
'214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix).mp3'
would be renamed to '214 Flume - Sleepless Jezzabell Doran) (Shlohmo Remix).mp3'
我想做的是删除“(壮举。艺术家姓名)" 从文件名中。(从左括号到右括号)。但我不想从文件名中删除任何其他存在的括号。例如,重命名“214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix) ).mp3" 至 "214 Flume - Sleepless (Shlohmo Remix).mp3"
(编辑:托马斯给了一个回答与下面的内容有关)
我知道要删除文件名中的“-”,'s/ - //'
但是我如何在同一个命令中执行此操作,而rename 's/\(feat.//' *.mp3
不是rename 's/ - //' *.mp3
作为单独的命令执行此操作
答案1
该命令类似于sed
,它允许您使用选项指定多个替换-e
,例如,
rename -n -e 's/\(feat.//' -e 's/ - //' *.mp3
并得到
'103 Flume - Left Alone (feat. Jezzabell Doran).mp3' would be renamed to '103 FlumeLeft Alone Jezzabell Doran).mp3'
'214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix).mp3' would be renamed to '214 FlumeSleepless Jezzabell Doran) (Shlohmo Remix).mp3'
在文档中,它说
-e
,--expr
此选项的代码参数应该是一个 Perl 表达式,它采用变量中的文件名
$_
并修改它以重命名文件名。当没有给出其他-c
、-C
、-e
、-s
或选项时,您可以-z
忽略来自-e
代码前面的。
答案2
你似乎想要的是非贪婪匹配并包含右括号。如果您希望将其视为字面意思,您还应该转义句点:
$ rename -n 's/\(feat\..*?\)//' *.mp3
103 Flume - Left Alone (feat. Jezzabell Doran).mp3 renamed as 103 Flume - Left Alone .mp3
214 Flume - Sleepless (feat. Jezzabell Doran) (Shlohmo Remix).mp3 renamed as 214 Flume - Sleepless (Shlohmo Remix).mp3