我的文件名为:
test-12.5.0_567-release.apk
我希望它们看起来像:
test-release.apk
我意识到我可以用bash做到这一点:
for file in *release.apk; do
mv "$file" "`basename $file SOMETHING`NEW_FILE_NAME"; done
我猜需要一些正则表达式吗?它看起来怎么样?
谢谢!
答案 0 :(得分:4)
你可以这样做:
for file in *release.apk; do
mv "$file" "${file/-*-/-}"
done
答案 1 :(得分:0)
或者你可以使用它:
for file in *release.apk; do
mv "$file" "${file%-*-*}-release.apk"
我删除-12.5.0_567-release.apk
,然后添加-release.apk
。
然而,恕我直言anubhava's solution看起来更好,因为它更准确地做你想要的。
答案 2 :(得分:0)
另一种选择,具有实际的正则表达式和捕获组。它使用=~
运算符和BASH_REMATCH
数组(包含捕获的子组)
for file in *; do
# check if the filename matches the regex and extract 2 groups
if [[ $file =~ ([^-]*-).*-([^-]*) ]]; then
# use the captured groups
mv "$file" "${BASH_REMATCH[1]}${BASH_REMATCH[2]}";
fi
done
答案 3 :(得分:0)
您可以使用带有rename
命令的正则表达式:
rename 's/-*-/-/g' *release.apk