我正在尝试在 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
尝试将您的sed
命令修改为类似
sed 's/[0-9]/0&/'
这将为您的示例案例完成工作。
您的命令不起作用,因为当您尝试引用匹配的字符串时实际上并没有:它是用&
(for the whole match) 或 numbered references完成的。
不需要sed
;只需使用您对文件名的了解:
for i in {0..9}
do
mv temp_$i.txt temp_0$i.txt
done
它不起作用,因为您没有捕获 sed 的输出,您需要将其放入反引号或$( ... )
. 另外,你的 RE 错了,试试这个:
for i in temp_?.txt
do
j=$(echo $i | sed 's/\([0-9]\{1,\}\)/0\1/g')
mv "$i" "$j"
done
注意:我更喜欢使用 -E 选项来sed
扩展正则表达式,但我不知道你是否sed
支持它。
你需要逃避你的变量赋值
j=`echo echo $i | sed 's/[^0-9]*/0[^0-9]*/g'`
此外,您不需要在每条语句的末尾使用分号,除非您将所有操作都放在一行中