regex - 在 Bash 中使用捕获组重命名

标签 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 在捕获组方面有问题吗?

最佳答案

您可以使用:

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

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

关于regex - 在 Bash 中使用捕获组重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662728/

相关文章:

java - 如何创建csr、key、c​​rt并将crt、rootca、subca导入jks?

regex - 使用正则表达式与 grep 匹配科学形式的 float

sql - REGEX 日期匹配格式

正则表达式 - 嵌套前瞻断言

linux - 如何阻止 getopts 将空白或 null 或其他选项作为选项值

bash - 在 zgrep 结果上重命名文件

正则表达式仅匹配字母数字、连字符、下划线和句点,没有重复的标点符号

c# - 如何使用 GetFiles() 搜索包含 doc 文件但排除 docx 文件?

bash - 如何将结果从 Shell 脚本传递到 Automator 中的下一步

mysql - 精确时间之间的查询