複数行の文字列があり、その中の項目が短いとしましょう。 16進ダンプを試みると、次の結果が表示されます。
echo "something
is
being
written
here" | hexdump -C
#00000000 73 6f 6d 65 74 68 69 6e 67 0a 69 73 0a 62 65 69 |something.is.bei|
#00000010 6e 67 0a 77 72 69 74 74 65 6e 0a 68 65 72 65 0a |ng.written.here.|
#00000020
ほとんどの16進ダンププログラムはhexdump
単に2Dマトリックスとして機能するため(各行のバイト/列数を定義できます)、この場合、出力全体は2行ダンプに圧縮されます。
いつものように実行し続けるプログラムはありますか?新しい行(0x0a
- しかし、他の文字やそのシーケンスも可能)に遭遇しない限り、新しい行も始まりますか?この場合、次のような出力が必要です。
00000000 73 6f 6d 65 74 68 69 6e 67 0a |something.|
0000000a 69 73 0a |is.|
0000000d 62 65 69 6e 67 0a |being.|
00000013 77 72 69 74 74 65 6e 0a |written.|
0000001b 68 65 72 65 0a |here.|
00000020
ベストアンサー1
read
以下は、読み取る文字数を制限する機能を利用するコンパクトソリューションの1つです。
c=0
while IFS= read -n16 -r line
do
len=${#line}
((len<16)) && { ((len++)) ; line+=$'\n' ;}
printf "%08x " $c
for ((i=0; i<len; i++))
do printf " %02x" "'${line:i:1}"
done
printf " %*s %s\n" $((50-3*len)) "" "'${line//[^[:print:]]/.}'"
((c+=len))
done