在另一個文件中尋找一個文件的內容,並將其替換為 FF

在另一個文件中尋找一個文件的內容,並將其替換為 FF

我有一個名為 rockx.dat 的二進位文件,以及一堆其他二進位檔案 rockx_#.pmf。

我想找到dat文件中pmf文件的內容,並將其替換為FF。所以如果pmf檔案是500字節,我想用500 FF位元組替換它。

答案1

您可以用於xxd您的應用程式。
為了處理二進位文件,您需要多個步驟:

#!/bin/bash
file_orig="rockx.dat"
file_subst="rockx_0.pmf"
# could use tmpfile here
tmp_ascii_orig="rockx.ascii"
tmp_ascii_subst="subst.ascii"

# convert files to ascii for further processing
xxd -p "${file_orig}" "${tmp_ascii_orig}"
xxd -p "${file_subst}" "${tmp_ascii_subst}"

# remove newlines in converted files to ease processing
sed -i ':a;N;$!ba;s/\n//g' "${tmp_ascii_orig}"
sed -i ':a;N;$!ba;s/\n//g' "${tmp_ascii_subst}"

# create a 0xff pattern file for pattern substitution
ones_file="ones.ascii"
dd if=<(yes ff | tr -d "\n") of="${ones_file}" count="$(($(stat -c %s "${tmp_ascii_subst}") - 1))" bs=1

# substitute the pattern in the original file
sed -i "s/$(cat "${tmp_ascii_subst}")/$(cat "${ones_file}")/" "${tmp_ascii_orig}"

# split the lines again to allow conversion back to binary
sed -i 's/.\{60\}/&\n/g' "${tmp_ascii_orig}"

# convert back
xxd -p -r "${tmp_ascii_orig}" "${file_orig}"

有關換行符號替換的更多信息,請查看這裡
有關模式文件創建的更多信息,請查看這裡
有關行分割的資訊請查看這裡
有關xxdhve 的資訊請查看線上說明頁。

請注意,這僅適用於一種模式替換,但應該可以更改它以提供多個文件的多個替換,而無需付出很大的努力。

相關內容