(Linux)コマンドラインでASCIIコード表を作る

5-1.文字コード

odコマンドでASCIIコード表を作ってみます。
odの-taオプションを使うと、ダンプ時に文字コードの場合は文字を、制御コードの場合は制御の種類を表示することができます。

takk~$ echo -ne "\x0" | od -ta
0000000 nul
0000001
takk~$ echo -ne "\x1b" | od -ta
0000000 esc
0000001
takk~$ echo -ne "\x41" | od -ta
0000000   A
0000001
takk~$ 

ベースになるコマンドとしてはodの他には、seqとperlです。

takk~$ seq 0 127 | perl -ne 'print chr' | od -ta
0000000 nul soh stx etx eot enq ack bel  bs  ht  nl  vt  ff  cr  so  si
0000020 dle dc1 dc2 dc3 dc4 nak syn etb can  em sub esc  fs  gs  rs  us
0000040  sp   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
0000060   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
0000100   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
0000120   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
0000140   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
0000160   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ del
0000200
takk~$ 

まず、左側のアドレスがデフォルトでは8進表示です。これを16進にするには、-Axオプションを使います。それから、アドレスは2桁で良いのでcutしておきます。

takk~$ seq 0 127 | perl -ne 'print chr' | od -ta -Ax | cut -b5-
00 nul soh stx etx eot enq ack bel  bs  ht  nl  vt  ff  cr  so  si
10 dle dc1 dc2 dc3 dc4 nak syn etb can  em sub esc  fs  gs  rs  us
20  sp   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
30   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
40   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
50   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
60   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
70   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ del
80

ヘッダ(\ 0〜f)を付けて末尾の空行(80〜)を削除します。

takk~$ echo -n "\ ";printf " %3x" `seq 0 15`;echo;seq 0 127 |
> perl -ne 'print chr'|od -ta -Ax | cut -b5- | head -n -1
\    0   1   2   3   4   5   6   7   8   9   a   b   c   d   e   f
00 nul soh stx etx eot enq ack bel  bs  ht  nl  vt  ff  cr  so  si
10 dle dc1 dc2 dc3 dc4 nak syn etb can  em sub esc  fs  gs  rs  us
20  sp   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
30   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
40   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
50   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
60   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
70   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ del
takk~$ 

これで完成です。

白黒が味気ないなあと思ったら、以下のようにhtmlに書き出してみましょう。ランダムで色を決めてます。

takk~$ (echo -n "\ ";printf " %3x" `seq 0 15`;echo;
> seq 0 127 | perl -ne 'print chr' | od -ta -Ax -v |
> cut -b5- | head -n -1 ) | perl -pe 'BEGIN{print"<TABLE border=1>"};
$c=sprintf("#%06x",int rand 0xffffff);
s|([^\s]+)|<TD bgcolor=$c>$1</TD>|g;
s|^(.*)$|<TR>$1</TR>|;END{print"</TABLE>"}' > a.html

ascii-table

コメント

タイトルとURLをコピーしました