Hat*_*kNZ 9 bash shell rename sed mv
我有以下格式的以下文件:
$ ls CombinedReports_LLL-*'('*.csv
CombinedReports_LLL-20140211144020(Untitled_1).csv
CombinedReports_LLL-20140211144020(Untitled_11).csv
CombinedReports_LLL-20140211144020(Untitled_110).csv
CombinedReports_LLL-20140211144020(Untitled_111).csv
CombinedReports_LLL-20140211144020(Untitled_12).csv
CombinedReports_LLL-20140211144020(Untitled_13).csv
CombinedReports_LLL-20140211144020(Untitled_14).csv
CombinedReports_LLL-20140211144020(Untitled_15).csv
CombinedReports_LLL-20140211144020(Untitled_16).csv
CombinedReports_LLL-20140211144020(Untitled_17).csv
CombinedReports_LLL-20140211144020(Untitled_18).csv
CombinedReports_LLL-20140211144020(Untitled_19).csv
Run Code Online (Sandbox Code Playgroud)
我希望删除此部分:(
20140211144020
这是报告运行的时间戳,因此会有所不同)
并最终得到类似的东西:
CombinedReports_LLL-(Untitled_1).csv
CombinedReports_LLL-(Untitled_11).csv
CombinedReports_LLL-(Untitled_110).csv
CombinedReports_LLL-(Untitled_111).csv
CombinedReports_LLL-(Untitled_12).csv
CombinedReports_LLL-(Untitled_13).csv
CombinedReports_LLL-(Untitled_14).csv
CombinedReports_LLL-(Untitled_15).csv
CombinedReports_LLL-(Untitled_16).csv
CombinedReports_LLL-(Untitled_17).csv
CombinedReports_LLL-(Untitled_18).csv
CombinedReports_LLL-(Untitled_19).csv
Run Code Online (Sandbox Code Playgroud)
我只是按照mv命令的思路思考,可能是这样的:
$ ls CombinedReports_LLL-*'('*.csv
Run Code Online (Sandbox Code Playgroud)
但也许一个sed命令或其他更好
Joh*_*024 14
rename
是perl
包的一部分.它根据perl样式的正则表达式重命名文件.要从文件名中删除日期:
rename 's/[0-9]{14}//' CombinedReports_LLL-*.csv
Run Code Online (Sandbox Code Playgroud)
如果rename
没有,可以使用sed
+ shell
:
for fname in Combined*.csv ; do mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')" ; done
Run Code Online (Sandbox Code Playgroud)
上面的循环遍历每个文件.对于每个文件,它执行一个mv
命令: mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')"
在这种情况下,sed
它可以使用与rename
上面命令相同的正则表达式. s/[0-9]{14}//
告诉我sed
连续查找14位数字并用空字符串替换它们.
不使用其他工具,例如rename
或sed
严格坚持bash
单独使用:
for f in CombinedReports_LLL-*.csv
do
newName=${f/LLL-*\(/LLL-(}
mv -i "$f" "$newName"
done
Run Code Online (Sandbox Code Playgroud)