01 - 情况
假设我有数百个这样的文件: (不关心文件类型)
Steven Scott - Stevens Dinner With Sandy.txt
Matt Lang - Matts First Song.txt
Martin Julien - Martins First Trip to Paris.txt
我想批量重命名它们以获得此输出:
Steven Scott - Steven's Dinner With Sandy.txt
Matt Lang - Matt's First Song.txt
Martin Julien - Martin's First Trip to Paris.txt
02 - 我做了什么
我首先访问“regexr.com”来编写我的命令。 我已将我的模式与此表达式相匹配:
(( - )(\w+))(?=(s))
替换对我来说似乎很简单:
$1'
仍然在“regexr.com”上,我得到了我想要的:
最后我在测试文件夹中执行了命令,这再次看起来非常基本。
rename -vf "s/(( - )(\w+))(?=(s))/$1'/gi" *
这是我停止理解发生了什么的地方......这是输出:
Martin Julien's First Trip to Paris.txt Matt Lang's First Song.txt Steven Scott's Dinner With Sandy.txt
谁能告诉我发生了什么事或者我是否犯了错误?
感谢您的见解... 马丁
$1
将被扩展(可能什么都没有),因此您的重命名模式实际上是 s/(( - )(\w+))(?=(s))/'/gi
- 换句话说,您实际上并没有保留捕获组。
您需要添加转义符来防止这种扩展:
rename -vf "s/(( - )(\w+))(?=(s))/\$1'/gi" *
这个简化的正则表达式更具可读性:
rename -v -f "s/( - \w+)(?=s)/\$1'/gi" *