我有一堆包含括号中的前缀代码的文件。我想将这些前缀后缀到,像这样:
Finance-(4BF)-001.doc --> Finance-001-4BF.doc
Corporate-(K04)-001.doc --> Corporate-001-K04.doc
我以前写过一个很简单的VBScript来做到这一点在Windows计算机上,但现在我需要做这在Linux上。经过一番繁琐的搜索之后,我无法找到一种简单而优雅的方式将正则表达式应用于文件名,并使用正则表达式匹配对其进行重命名。
到目前为止,我有这样的:
#!/bin/bash
for i in *.doc
do
x=${i//[\(\)]/}
echo "$i renames to: $x"
done
的这个输出是:
Corporate-(K04)-001.doc renames to: Corporate-K04-001.doc
Finance-(4BF)-001.doc renames to: Finance-4BF-001.doc
我知道正则表达式,以上仅剥离括号()从文件名...但肯定必须有一种方法来匹配他们的内容(例如\((\w)\)
),然后在重命名命令中使用该匹配(例如$1
)?
也是一个Linux新手我不明白什么x=${...}
正在做什么,因为我不知道它叫什么,我不能谷歌它。我认为它正在对字符串i
应用正则表达式,但在那种情况下,为什么我不能像$1
和$2
等那样从中提取匹配项?
谢谢!
参见[参数替换]为高级Bash脚本指南(http://tldp.org/LDP/abs/html/parameter-substitution.html#PARAMSUBREF)部更多的扩展/替换语法。 [Manipulating Strings](http://tldp.org/LDP/abs/html/string-manipulation.html)也是值得一读的一节。 –
完美的作品 - 谢谢。我唯一的问题是:有没有办法用“普通”正则表达式(即不是POSIX的)来做到这一点,所以我不必重新格式化正则表达式? – WackGet
@WackGet使用除'sed'之外的工具,例如Perl或Bash本身。 – ephemient