2

スプレッドシートからファイル名を生成し、既存のファイルを新しいファイルに変換する bash スクリプトを作成しています。62_02.png例として、結果のファイル名を使用して変換を行うことができます。ご覧のとおり、整数、アンダースコア、およびファイル拡張子 (英数字の場合があります) が含まれています。

私はこの答えがいかに簡潔であるかが好きで、純粋に数値のファイル名の単純な変換を行うためにこの投稿を使用しているのを見てきましawkたが、アンダースコアで動作させる方法がわかりません.

必要に応じてsed、実用的であれば問題なく使用できます。

私の目標は、次のようなファイル名にすることです。

0062_02.png

どうもありがとう!

クロージング情報:

以下のソリューションを選択したのは、ソリューションの数が多いためです。これを読んでいる他の人が自分の利益のために選択できるようにするためです。ただし、@cabad によって提供された回答も有効であり、おそらく初心者のプログラマーである IMHO にとってよりフレンドリーなソリューションであることに言及したいと思います。

4

3 に答える 3

4

問題の要求に応じて awk を使用する:

echo "62_02.png" | awk -F_ '{ printf("%04d_%s\n", $1, $2); }'

「-F_」は、フィールド区切り文字としてアンダースコアを使用するよう awk に指示します。この回答では、ファイル名にアンダースコアが 1 つしかないことを前提としています。

編集:ファイル名に複数のアンダースコアを含めることができる場合、これを行うことができます:

echo "62_02.png" | awk -F_ '{ printf("%04d_%s\n", $1, substr($0, index($0, $2))); }'
echo "62_02_x.png" | awk -F_ '{ printf("%04d_%s\n", $1, substr($0, index($0, $2))); }'
于 2013-07-17T21:07:18.327 に答える
4

でこれを試してください:

を使用:

$ a=62_02.png
$ printf -v newvar %04d_%s ${a%_*} ${a##*_}
echo "$newvar"
0062_02.png

別の簡潔な解決策:

$ ( a=62_02.png; IFS=_; printf '%04d_%s\n' $a )
0062_02.png
于 2013-07-17T21:05:22.473 に答える
2

GNU のコード:

sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'

例:

$ エコー 6_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
0006_02.png

$ エコー 62_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
0062_02.png

$ エコー 162_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
0162_02.png

$ エコー 1632_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
1632_02.png

$ エコー 16324_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
16324_02.png
于 2013-07-17T22:08:34.517 に答える