在Bash中使用捕获组重命名

时间:2014-07-09 19:56:52

标签: regex bash

我想重命名格式为

的几个文件
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对捕获组有困难吗?

1 个答案:

答案 0 :(得分:4)

您可以使用:

for i in *.a; do
   mv "$i" "${i%%-*}.a"
done

%%将删除匹配的后缀模式;在这种情况下,它会删除-*或从第一个-开始的所有内容。