我正在尝试替换某些文件名中不带连字符的 guid。
我认为我已经完成了正则表达式,但是我似乎无法获得正确的转义或替换命令来相互协作。
这是我的正则表达式
https://regex101.com/r/SiqsjP/1
(-[0-9a-f]{32})
文件名像这样
iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png
我看过这个答案用于查找和删除文件名中的子字符串的 Bash shell 脚本但又不太一样...
我认为这应该可行,但它不会抱怨错误?
newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`
答案1
在sed 布雷(基本正则表达式)您还应该转义大括号{}
:
newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`
要移动/重命名文件:
mv "$filename" "$newname"
答案2
在 shell 中使用字符串操作:
for name in *.png; do
# remove everything after the last '-' including the dash
# and add the '.png' extension back
newname="${name%-*}.png"
echo mv "$name" "$newname"
done
这假设您要重命名的所有文件都是.png
当前目录中的文件。
运行一次并删除(echo
如果它看起来似乎在做正确的事情)。