You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量重命名文件正则匹配异常求助:rename命令结果不符预期

文件批量重命名正则替换异常问题

原始文件名格式:

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

你在regex测试工具中用正则(( - )(\w+))(?=(s)),替换为$1'能得到正确结果,但执行命令:

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

原因与解决办法

问题出在shell的引号解析:你用双引号包裹替换表达式时,shell会把$1当作自身的位置参数(当前无参数时为空),导致实际传给rename的替换规则变成了s/(( - )(\w+))(?=(s))/'/gi——直接把匹配到的 - XXX替换成了单引号,最终出现文件名里-消失、直接加's的错误。

解决方法很简单,把整个替换表达式用单引号括起来,避免shell解析正则的反向引用$1,同时注意单引号的转义:

rename -vf 's/(( - )(\w+))(?=(s))/$1\'/gi' *

也可以简化正则写法,让逻辑更清晰:

rename -vf 's/ - (\w+)(?=s)/ - $1\'/gi' *

执行上述命令后,就能得到你预期的重命名结果。

内容的提问来源于stack exchange,提问作者Martin Julien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:57:52