bashでいくつかの異なるファイルの名前を変更しようとしています。たとえば、09までtemp_1からtemp_01(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
; ファイル名について知っていることを使用してください。
for i in {0..9}
do
mv temp_$i.txt temp_0$i.txt
done
sed
コマンドを次のようなものに変更してみてください
sed 's/[0-9]/0&/'
それはあなたの例の場合の仕事をします。
一致した文字列を参照しようとすると、実際には機能しないため、コマンドは機能しません。&
(一致全体に対して)または番号付きの参照で実行されます。
バックティックまたはの中に入れる必要がある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
。
変数の割り当てをエスケープする必要があります
j=`echo echo $i | sed 's/[^0-9]*/0[^0-9]*/g'`
また、すべての操作が1行にない限り、各ステートメントの最後にセミコロンは必要ありません。