我有一個文件,在文件的開頭和結尾處有垃圾(二進制頁眉和頁腳)。我想知道如何攻擊這些位元組。例如,我們假設從開頭開始有 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 個位元組。<>;
是一個在讀取+寫入模式下開啟並在命令成功時截斷的重定向運算子。