我想重命名几个格式的文件
libabc-x86_64-gnu-linux.a
libasdfgh-x86-gnu-linux.a
所有的格式
libabc.a
libasdfgh.a
使用 Bash。我已经编写了正则表达式 (libpj[^-]*).*
,它应该将有趣的部分留在捕获组 1 中。所以我尝试使用 Bash 的参数替换:
for i in `ls *.a`; do mv "$i" "${i/(lib[^-]*).*/\1}"; done
但是 Bash 给出了很多形式的错误
mv: 'libabc-x86_64-gnu-linux.a' and 'libabc-x86_64-gnu-linux.a' are the same file
暗示正则表达式在某种程度上不匹配,即使我已经确认它与几个实用程序匹配,尤其是非常优秀的 RegExr .我究竟做错了什么? Bash 在捕获组方面有问题吗?
最佳答案
您可以使用:
for i in *.a; do
mv "$i" "${i%%-*}.a"
done
%%
将删除匹配的后缀模式;在这种情况下,它会删除 -*
或以第一个 -
开头的所有内容。
关于regex - 在 Bash 中使用捕获组重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662728/