0

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 
4

4 に答える 4

1

の必要はありませんsed; ファイル名について知っていることを使用してください。

for i in {0..9}
do
   mv temp_$i.txt temp_0$i.txt
done
于 2012-06-21T13:03:11.650 に答える
1

sedコマンドを次のようなものに変更してみてください

sed 's/[0-9]/0&/'

それはあなたの例の場合の仕事をします。

一致した文字列を参照しようとすると、実際には機能しないため、コマンドは機能しません。&(一致全体に対して)または番号付きの参照で実行されます。

于 2012-06-21T12:40:35.477 に答える
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

于 2012-06-21T12:58:18.307 に答える
0

変数の割り当てをエスケープする必要があります

j=`echo echo $i | sed 's/[^0-9]*/0[^0-9]*/g'`

また、すべての操作が1行にない限り、各ステートメントの最後にセミコロンは必要ありません。

于 2012-06-21T22:51:30.643 に答える