![使用正则表达式模式重命名Linux中的文件](https://linux22.com/image/95595/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%A8%A1%E5%BC%8F%E9%87%8D%E5%91%BD%E5%90%8DLinux%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
我想重命名许多文件,例如
Tum Hi Ho [www.DJMaza.Com].mp3
到Tum Hi Ho.mp3
为此,我使用了此命令。但不知何故它不起作用。
`rename -n 's/(.*)([.*])(\.mp3)/$1$3/' *.mp3`
答案1
你很接近,但还不够:
rename -n 's/\[[^\]]+\]//' *.mp3
问题是这[]
是一个特殊的正则表达式构造,因此如果要匹配实际的括号,则需要对括号进行转义。这就是我的版本中反斜杠的目的。
未转义的括号形成所谓的字符类。字符类基本上可以匹配括号内的任何字符。因此[.*]
匹配句点或星号。当您将插入符号 ( ^
) 添加到类的开头时,它会匹配任何字符不是括号内。
在我的正则表达式中,我们匹配一个左括号\[
加上一个或多个不是右括号的字符[^\]]+
加上一个右括号\]
,然后删除所有这些字符。