如何从文件的开头和结尾修剪字节?

Eva*_*oll 13 files trim byte

我有一个文件,在文件的开头和结尾都有垃圾(二进制页眉和页脚)。我想知道如何核对这些字节。例如,让我们假设从一开始就有 25 个字节。并且,距离末尾有 2 个字节。

我知道我可以使用 truncate 和 dd,但是 truncate 不适用于流,而且在硬文件上运行两个命令似乎有点笨拙。如果truncate知道文件有多大,可以将文件转换为dd. 或者,如果有更好的方法来做到这一点?

Ste*_*itt 18

您可以结合使用 GNUtailhead

tail -c +26 file | head -c -2
Run Code Online (Sandbox Code Playgroud)

将输出file从字节 26 开始的内容,并-2在结束前停止两个字节(减去 2 )。(-c操作字节,而不是字符。)

  • 请注意,`tail -c +26` 是标准的(`head -c -2` 不是)。 (2认同)

jc_*_*c__ 7

dd将在一个命令中为您完成这两项工作。将块大小设置为 1 个字节,跳过前 25 个字节,计数到文件大小减去跳过和结束字节。

100 byte file
file.img
Run Code Online (Sandbox Code Playgroud)

dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73

仔细检查数字,因为它可能从 0 开始计数。

  • 使用 `bs=1` dd 对每个字节进行两次系统调用,这非常慢。GNU dd 有 `count_bytes` 和 `skip_bytes` 可以提供帮助,做类似 `dd bs=8192 iflag=count_bytes,skip_bytes skip=25 count=73 < infile > outfile` (5认同)