You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本自动替换大文件中的指定十六进制值?

批量替换大文件中的特定十六进制串

单文件处理脚本

直接用xxd配合sed实现十六进制替换,同时做好文件备份避免数据丢失:

FILE='file.vpk'
SEARCH_STRING='MaxRagdollCount'

# 生成目标字符串的十六进制前缀
OLD_HEX_PREFIX=$(echo -n "$SEARCH_STRING" | xxd -p)
# 定义替换后的完整十六进制串(对应"MaxRagdollCount" "9")
TARGET_HEX="${OLD_HEX_PREFIX}2220223922"

# 备份原文件
cp "$FILE" "${FILE}.bak"

# 执行替换:转十六进制流→替换→转二进制
xxd -p "$FILE" | sed -E "s/${OLD_HEX_PREFIX}222022[0-9a-f]{2,4}22/${TARGET_HEX}/g" | xxd -r -p > "${FILE}.tmp"

# 替换原文件
mv "${FILE}.tmp" "$FILE"

多文件批量处理脚本

如果需要处理多个.vpk文件,用循环遍历即可:

SEARCH_STRING='MaxRagdollCount'
OLD_HEX_PREFIX=$(echo -n "$SEARCH_STRING" | xxd -p)
TARGET_HEX="${OLD_HEX_PREFIX}2220223922"

# 遍历当前目录下所有.vpk文件
for FILE in *.vpk; do
    if [ -f "$FILE" ]; then
        echo "Processing $FILE..."
        cp "$FILE" "${FILE}.bak"
        xxd -p "$FILE" | sed -E "s/${OLD_HEX_PREFIX}222022[0-9a-f]{2,4}22/${TARGET_HEX}/g" | xxd -r -p > "${FILE}.tmp"
        mv "${FILE}.tmp" "$FILE"
        echo "Done with $FILE"
    fi
done

关键步骤说明

  • 文件备份:操作前先复制原文件为.bak后缀的备份,防止替换过程中出错导致数据损坏。
  • 十六进制转换:xxd -p将二进制文件转为无格式的连续十六进制字符串,方便文本工具处理;xxd -r -p则将处理后的十六进制串转回二进制文件。
  • 正则匹配:sed -E使用扩展正则表达式,匹配MaxRagdollCount" "后面1-2位数字的十六进制串([0-9a-f]{2,4}对应1位数字占2个十六进制字符,2位数字占4个),并替换为目标串。

验证替换结果

处理完成后,可通过你原有的代码验证是否替换成功:

FILE='file.vpk'
SEARCH_STRING='MaxRagdollCount'
OLD_HEX_VALUE="$( echo -n "$SEARCH_STRING" | xxd -p )"
HEX_VALUE=($( xxd -p "$FILE" | grep -E -o "${OLD_HEX_VALUE}222022[0-9]{,2}22" ))
echo "$HEX_VALUE"

输出应为替换后的十六进制串:4d6178526167646f6c6c436f756e742220223922

内容的提问来源于stack exchange,提问作者Paweł Selen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:05:00