我有一个文件,在文件的开头和结尾处有垃圾(二进制页眉和页脚)。我想知道如何攻击这些字节。例如,我们假设从开头开始有 25 个字节。并且,距离末尾 2 个字节。
我知道我可以使用 truncate 和 dd,但是 truncate 不适用于流,并且在硬文件上运行两个命令似乎有点笨拙。如果在truncate
知道文件有多大的情况下可以将文件转移到dd
.或者,是否有更好的方法来做到这一点?
答案1
答案2
DD将通过一个命令为您完成这两件事。将块大小设置为 1 个字节,跳过前 25 个字节,计算文件大小减去跳过和结束字节。
100 byte file
file.img
dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73
仔细检查数字,因为它可能从 0 开始计数。
答案3
使用 ksh93:
{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25))
或者就地进行:
{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25)) 1<>; file
如果你/opt/ast/bin
领先于你的$PATH
,你就会得到head
内置的。
<#((...))
是一个lseek()
运算符。...
被解释为算术表达式,其中EOF
是文件的长度。因此,上面我们将要显示的部分的长度指定为$n
文件中的 25 个字节。<>;
是一个在读+写模式下打开并在命令成功时截断的重定向运算符。