我有一个文件名目录,其中缺少点,这标志着文件扩展名的开头:
filename1jpg
filename2JPG
filename3MPG
我现在想在行尾的第三个位置之前添加.
,以便将文件名重命名为:
filename1.jpg
filename2.JPG
filename3.MPG
最方便的可能是shell上的rename
,但我无法想象这是一个正则表达式。有人能帮助我吗?
答案 0 :(得分:5)
您可以在文件所在的目录上尝试以下重命名命令。
rename 's/(...)$/.$1/' *
$
表示行锚的结束。 ()
称为捕获组,用于捕获字符。所以(...)$
此捕获组将捕获最后三个字符并将其保存到组索引1.然后匹配的子字符串(最后三个字符)被一个点加上组索引中的字符替换1(最后三个字符)。
答案 1 :(得分:1)
您可以使用这样的正则表达式:
(.*)(...)
<强> Working demo 强>
使用替换你可以拥有:
这个想法是捕获字符串的开头和最后3个字符,因此使用捕获组内容,您将连接像\1
这样的点。\2
答案 2 :(得分:1)
使用perl one-liner。
perl -e 'rename $_, s/\.?(...)$/.$1/r for <*>'
或者使用shell重命名:
rename 's/\.?(...)$/.$1/' *
答案 3 :(得分:1)
查找(?<=[^.])(?=[^.]{3}$)
替换.
答案 4 :(得分:1)
以下是替代方式:
awk '{print $1, $1}' | awk '{$2=gensub(/...$/,".\\0","",$2); print}' | xargs -n2 echo mv
可以通过删除echo
来执行。