使 xxd 断线

使 xxd 断线

用于显示具有两种格式文本的文件内容SE 上另一篇文章中的二进制数据我无法决定是否显示 ASCII 渲染输出或输出xxd

作为中间路线,我想到了一个十六进制转储尊重换行符。

(其他)示例:

00000000: 636f 6d6d 6974 2031 3933 0074 7265 6520 提交 193.tree
00000010: 3331 3439 3530 3736 3263 6561 3232 3364 314950762cea223d
00000020:3230 6233 3931 6235 3162 3336 3463 6134 20b391b51b364ca4
00000030: 3165 3636 3234 39310a61 7574 686f 7220 1e662491作者
00000040: 4578 616d 706c 6520 5573 6572 203c 6578 示例用户 <ex
00000050: 616d 706c 6575 7365 7240 7374 6163 6b6f 充足用户@stacko
00000060:7665 7266 6c6f 772e 636f 6d3e 2031 3439 verflow.com> 149
00000070: 3831 3236 3633 3320 2b30 3230 300a636f 8126633 +0200
00000080: 6d6d 6974 7465 7220 4578 616d 706c 6520 mmitter 示例
00000090: 5573 6572 203c 6578 616d 706c 6575 7365 用户 <示例使用
000000a0:7240 7374 6163 6b6f 7665 7266 6c6f 772e r@stackoverflow。
000000b0: 636f 6d3e 2031 3439 3831 3236 3633 3320 com> 1498126633
000000c0: 2b30 3230 300a 0a69 6e69 740a            +0200..在里面

会成为

00000000: 636f 6d6d 6974 2031 3933 0074 7265 6520 提交 193.tree
00000010: 3331 3439 3530 3736 3263 6561 3232 3364 314950762cea223d
00000020:3230 6233 3931 6235 3162 3336 3463 6134 20b391b51b364ca4
00000030: 3165 3636 3234 39310a                   1e662491

00000030:                       61 7574 686f 7220 作者
00000040: 4578 616d 706c 6520 5573 6572 203c 6578 示例用户 <ex
00000050: 616d 706c 6575 7365 7240 7374 6163 6b6f 充足用户@stacko
00000060:7665 7266 6c6f 772e 636f 6d3e 2031 3439 verflow.com> 149
00000070: 3831 3236 3633 3320 2b30 3230 300a       8126633 +0200

00000070:                                    636f公司
00000080: 6d6d 6974 7465 7220 4578 616d 706c 6520 mmitter 示例
00000090: 5573 6572 203c 6578 616d 706c 6575 7365 用户 <示例使用
000000a0:7240 7374 6163 6b6f 7665 7266 6c6f 772e r@stackoverflow。
000000b0: 636f 6d3e 2031 3439 3831 3236 3633 3320 com> 1498126633
000000c0: 2b30 3230 300a                           +0200

000000c0:                0a                              

000000c0:                  69 6e69 740a                   在里面

或者

00000000: 636f 6d6d 6974 2031 3933 0074 7265 6520 提交 193.tree
00000010: 3331 3439 3530 3736 3263 6561 3232 3364 314950762cea223d
00000020:3230 6233 3931 6235 3162 3336 3463 6134 20b391b51b364ca4
00000030: 3165 3636 3234 39310a                   1e662491
00000030:                       61 7574 686f 7220 作者
00000040: 4578 616d 706c 6520 5573 6572 203c 6578 示例用户 <ex
00000050: 616d 706c 6575 7365 7240 7374 6163 6b6f 充足用户@stacko
00000060:7665 7266 6c6f 772e 636f 6d3e 2031 3439 verflow.com> 149
00000070: 3831 3236 3633 3320 2b30 3230 300a       8126633 +0200
00000070:                                    636f公司
00000080: 6d6d 6974 7465 7220 4578 616d 706c 6520 mmitter 示例
00000090: 5573 6572 203c 6578 616d 706c 6575 7365 用户 <示例使用
000000a0:7240 7374 6163 6b6f 7665 7266 6c6f 772e r@stackoverflow。
000000b0: 636f 6d3e 2031 3439 3831 3236 3633 3320 com> 1498126633
000000c0: 2b30 3230 300a                           +0200
000000c0:                0a                              
000000c0:                  69 6e69 740a                   在里面

或者

00000000: 636f 6d6d 6974 2031 3933 0074 7265 6520 提交 193.tree
00000010: 3331 3439 3530 3736 3263 6561 3232 3364 314950762cea223d
00000020:3230 6233 3931 6235 3162 3336 3463 6134 20b391b51b364ca4
00000030: 3165 3636 3234 39310a                   1e662491
                                61 7574 686f 7220 作者
00000040: 4578 616d 706c 6520 5573 6572 203c 6578 示例用户 <ex
00000050: 616d 706c 6575 7365 7240 7374 6163 6b6f 充足用户@stacko
00000060:7665 7266 6c6f 772e 636f 6d3e 2031 3439 verflow.com> 149
00000070: 3831 3236 3633 3320 2b30 3230 300a       8126633 +0200
                                             636f公司
00000080: 6d6d 6974 7465 7220 4578 616d 706c 6520 mmitter 示例
00000090: 5573 6572 203c 6578 616d 706c 6575 7365 用户 <示例使用
000000a0:7240 7374 6163 6b6f 7665 7266 6c6f 772e r@stackoverflow。
000000b0: 636f 6d3e 2031 3439 3831 3236 3633 3320 com> 1498126633
000000c0: 2b30 3230 300a                           +0200
                         0a                              
                           69 6e69 740a                   在里面

或类似的

答案1

不完全符合您的要求,但非常接近。

文件中有空字节(值为 0x00),这使事情变得更加复杂。我假设如果您的输入中不存在该字节值,则这些字节可以更改为 DEL(值 0x7F 的字节)。

这是用 tr 完成的:

$ cat infile | tr '\00' '\177'

使用 xxd 处理文件后,可以恢复更改。

运行这个脚本:

#!/bin/bash

while IFS=$'\n' read line; do
    length=$((${#line}+1))
    { 
        dd if=/dev/zero bs=1 count=$((position%16)) 2>/dev/null;
        echo "$line"; 
    } |
         tr '\177' '\0' |
         xxd -o "$((16*(position/16)))" -l "$((length+position%16))"
    echo
    (( position=position+length ))
done < <(cat infile | tr '\0' '\177')

要得到:

$ ./so
00000000: 636f 6d6d 6974 2031 3933 0074 7265 6520  commit 193.tree
00000010: 3331 3439 3530 3736 3263 6561 3232 3364  314950762cea223d
00000020: 3230 6233 3931 6235 3162 3336 3463 6134  20b391b51b364ca4
00000030: 3165 3636 3234 3931 0a                   1e662491.

00000030: 0000 0000 0000 0000 0061 7574 686f 7220  .........author
00000040: 4578 616d 706c 6520 5573 6572 203c 6578  Example User <ex
00000050: 616d 706c 6575 7365 7240 7374 6163 6b6f  ampleuser@stacko
00000060: 7665 7266 6c6f 772e 636f 6d3e 2031 3439  verflow.com> 149
00000070: 3831 3236 3633 3320 2b30 3230 300a       8126633 +0200.

00000070: 0000 0000 0000 0000 0000 0000 0000 636f  ..............co
00000080: 6d6d 6974 7465 7220 4578 616d 706c 6520  mmitter Example
00000090: 5573 6572 203c 6578 616d 706c 6575 7365  User <exampleuse
000000a0: 7240 7374 6163 6b6f 7665 7266 6c6f 772e  r@stackoverflow.
000000b0: 636f 6d3e 2031 3439 3831 3236 3633 3320  com> 1498126633
000000c0: 2b30 3230 300a                           +0200.

000000c0: 0000 0000 0000 0a                        .......

000000c0: 0000 0000 0000 0069 6e69 740a            .......init.

不完全是你所要求的(由于添加了许多零),但我相信这已经足够接近来表达这个想法了。

如果您想要不带零的输出,但字节位置的编号不是 16 的倍数,请索要脚本。

相关内容