我正在尝试在bash中重命名几个不同的文件。如何将例如temp_1重命名为temp_01直到09 (temp_9重命名为temp_09)?
我使用sed,但不知何故不起作用。
我试着这样做:
for i in temp_?.txt;
do
j=echo $i | sed 's/[^0-9]*/0[^0-9]*/g';
mv "$i" "$j";
done 发布于 2012-06-21 20:40:35
尝试将sed命令修改为如下所示
sed 's/[0-9]/0&/'这将完成您的示例案例的工作。
您的命令不起作用,因为当您试图引用匹配的字符串时,实际上并没有这样做:它是用& (对于整个匹配)或numbered references完成的。
发布于 2012-06-21 21:03:12
不需要使用sed;只需使用您所知道的文件名:
for i in {0..9}
do
mv temp_$i.txt temp_0$i.txt
done发布于 2012-06-21 20:58:18
它不起作用,因为您没有捕获sed的输出,您需要将sed放在反引号或$( ... )中。另外,你的RE是错误的,试试这个:
for i in temp_?.txt
do
j=$(echo $i | sed 's/\([0-9]\{1,\}\)/0\1/g')
mv "$i" "$j"
done 注意:对于扩展正则表达式,我更喜欢使用sed的-E选项,但是我不知道您的sed是否支持它。
https://stackoverflow.com/questions/11138137
复制相似问题