テキストファイルがありますが、次のようにファイルに行を追加したいと思います。
#define ICFGx 0x2y
ここで、xは0から始まり255で終わる10進数で、各行に1つ増加します。 yは000で始まり3FCで終わる16進数で、行ごとに0x004増加します。
#define ICFG0 0x2000
#define ICFG1 0x2004
#define ICFG2 0x2008
#define ICFG3 0x200C
また、特定の行、たとえば500行から始めて追加したいと思います。
コマンドラインでこれを行う方法はありますか?私はLinuxターミナルを初めて使用し、まだbashスクリプトを書いていません。
ベストアンサー1
Bashでは、これを使用してprintf
出力形式を指定できます。
for i in {0..255} ; do
printf "#define ICFG%-3d 0x2%03X\n" $i $((i*4))
done > insert.txt
%d
3
サイズを表す10進整数を表し、マイナス記号は左揃えを表します。長さを表すX
16進数の大文字を表し、ゼロで埋められることを示します。算術拡張を紹介します。3
0
$(( ... ))
sed
ファイルに挿入するだけでなく、
sed -i~ 500rinsert.txt input.txt
あるいは、Perlを使用することもできます。
perl -i~ -pe 'if ($. == 500) {
printf "#define ICFG%-3d 0x2%03X\n", $_, $_ * 4 for 0 .. 255 }
' -- input.txt
$.
入力行番号です。- 印刷機能動作はbashの動作と似ています(少なくとも、および
%-3d
の場合%03X
)。