【发布时间】:2018-08-22 09:39:24
【问题描述】:
我有三个文件名为
file1.txt
file2.txt
file3.txt
我正在尝试将它们重命名为
mynewfile-1.txt
mynewfile-2.txt
mynewfile-3.txt
我将如何使用正则表达式来解决这个问题?
【问题讨论】:
我有三个文件名为
file1.txt
file2.txt
file3.txt
我正在尝试将它们重命名为
mynewfile-1.txt
mynewfile-2.txt
mynewfile-3.txt
我将如何使用正则表达式来解决这个问题?
【问题讨论】:
像这样:
rename -n 's/^file/mynewfile-/' *.txt
或来自 cmets:
rename -n 's/^file(\d+)/mynewfile-${1}-test/' *.txt
___ ____
^ ^
capturing group |
captured group
当输出看起来不错时删除-n开关以真正重命名。
还有其他同名的工具可能会也可能不会这样做,所以要小心。
util-linux 包中的重命名命令不会。
如果您运行以下命令 (GNU)
$ rename
你看到perlexpr,那么这似乎是正确的工具。
如果不是,则将其设为 Debian 和派生类 Ubuntu 的默认值(通常已经如此):
$ sudo apt install rename
$ sudo update-alternatives --set rename /usr/bin/file-rename
对于archlinux:
pacman -S perl-rename
对于 RedHat 系列发行版:
yum install prename
“prename”包位于 EPEL 存储库中。
对于 Gentoo:
emerge dev-perl/rename
对于 *BSD:
pkg install p5-File-Rename
对于 Mac 用户:
brew install rename
如果您在其他发行版中没有此命令,请搜索您的包管理器进行安装或do it manually
或者你可以使用 perl CPAN:
cpan -i File::Rename
可以找到旧的独立版本here
这个工具最初是由 Perl 的父亲 Larry Wall 编写的。
【讨论】:
rename -n 's/^file(\d+)/mynewfile-${1}-test/' *.txt