如何從檔案的開頭和結尾刪除位元組?

如何從檔案的開頭和結尾刪除位元組?

我有一個文件,在文件的開頭和結尾處有垃圾(二進制頁眉和頁腳)。我想知道如何攻擊這些位元組。例如,我們假設從開頭開始有 25 個位元組。並且,距離末尾 2 個位元組。

我知道我可以使用 truncate 和 dd,但是 truncate 不適用於流,並且在硬文件上運行兩個命令似乎有點笨拙。如果在truncate知道文件有多大的情況下可以將文件轉移到dd.或者,是否有更好的方法來做到這一點?

答案1

你可以結合GNUtailhead

tail -c +26 file | head -c -2

將輸出從第 26 個位元組開始,到結束前file兩個位元組(減去兩個)的內容。 -2-c對位元組進行操作,而不是字元。)

答案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 個位元組。
  • <>;是一個在讀取+寫入模式下開啟並在命令成功時截斷的重定向運算子。

相關內容