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

如何用Bash命令替换二进制文件中字符串为对应长度空字节

二进制文件字符串替换为等长空字节的Bash方案

可以用两种简洁的方法实现,适配任意目标字符串,无需手动输入大量\0:

方法一:Perl 命令(推荐,最简洁)

Perl 对二进制文件处理友好,能直接动态生成等长的空字节序列:

# 定义要替换的目标字符串
TARGET_STR="example_str"
# 执行替换,生成临时文件后覆盖原文件(可添加.bak生成备份)
perl -0777 -pe "s/\Q$TARGET_STR\E/\x00" x length($TARGET_STR) "/g" example_file > temp_file && mv temp_file example_file

参数说明:

  • -0777:让 Perl 一次性读取整个文件,避免二进制中的特殊字符(如换行符)打断处理
  • -pe:循环处理输入并打印结果
  • \Q$TARGET_STR\E:自动转义目标字符串中的正则特殊字符(如.、*),确保精准匹配
  • \x00" x length($TARGET_STR):生成与目标字符串长度完全一致的空字节序列

如果想直接修改原文件并自动生成备份,可改用:

perl -0777 -i.bak -pe "s/\Q$TARGET_STR\E/\x00" x length($TARGET_STR) "/g" example_file

执行后会保留原文件为 example_file.bak。

方法二:xxd + sed 组合(依赖系统基础工具)

通过将二进制文件转成十六进制文本进行替换,再转回二进制,适合没有 Perl 的环境:

TARGET_STR="example_str"
# 把目标字符串转为十六进制格式
TARGET_HEX=$(echo -n "$TARGET_STR" | xxd -p | tr -d '\n')
# 生成对应长度的空字节十六进制(每个空字节对应"00")
NULL_HEX=$(printf '00%.0s' $(seq 1 ${#TARGET_STR}))
# 转换格式、替换、转回二进制
xxd -p example_file | sed "s/$TARGET_HEX/$NULL_HEX/g" | xxd -p -r > temp_file && mv temp_file example_file

步骤说明:

  1. xxd -p:将二进制文件转为无格式的纯十六进制字符串
  2. printf '00%.0s' ...:根据目标字符串长度生成连续的00序列
  3. sed替换后,xxd -p -r将十六进制字符串还原为二进制文件

注意事项:

  • 操作前建议备份原文件,避免意外数据丢失
  • 若目标字符串包含特殊二进制字符,两种方法都能稳定处理

内容的提问来源于stack exchange,提问作者AvidCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:36:24