gpt4 book ai didi

linux - 使用十六进制位置从文件中删除行

转载 作者:太空狗 更新时间:2023-10-29 11:38:17 26 4
gpt4 key购买 nike

我有一个大文件,我想从中删除一些内容,该文件是二进制的,我没有行号,但有十六进制地址,所以我如何删除之间的区域:
0x13e70a00 和 0x1eaec03ff
使用 sed(包括两者)

这样的东西行得通吗?

sed -n 's/\x13e70a00/,s/\x1eaec03ff/ p' orig-data-file > new-file

最佳答案

从您所写的内容来看,您似乎正试图删除两个十六进制模式之间的所有字节。为此你需要

这会删除模式之间的所有字节,包括模式。

 sed 's/\x13\xe7\x0a\x00.*\x1e\xae\xc0\x3f//g' in >out

这将删除模式之间的所有字节,使模式保持不变。 (有一种方法可以用正则表达式的编号部分来解决这个问题,但这开始起来更清楚一点)

 sed 's/\x13\xe7\x0a\x00.*\x1e\xae\xc0\x3f/\x13\xe7\x0a\x00\x1e\xae\xc0\x3f/g' in >out

他们搜索 s/对于 <pattern1>后跟任何文本 .*其次是 <pattern2>并用任何东西替换它 //g或者只是两条边 /<pattern1><pattern2>/g整个文件/g

如果要删除(或替换)从字节 300 到字节 310:

sed 's/\(.\{300\}\).\{10\}/\1rep-str/' in>out

这匹配前 300 个字符(.\{300\})并记住它们(\(\))。它也匹配接下来的 10 个字符。它用前 300 个字符 ( \1 ) 替换整个组合匹配,后跟替换字符串 rep-str此替换字符串可以为空,仅删除字节 300 和 310 之间的文本。

但是,如果有任何换行符,这将非常脆弱。如果你可以在没有替代品的情况下生活:

dd if=file bs=1 skip=310|dd of=file bs=1 seek=300 conv=notrunc

这通过从第 310 个字节开始复制到从第 300 个位置开始的文件中进行就地替换,从而删除 10 个字节

一个更通用的选择是

dd if=in bs=1 count=300>out
printf "replacement text">>out
dd if=in bs=1 skip=310>>out

虽然最简单的方法是使用像 Bless 这样的十六进制编辑器

关于linux - 使用十六进制位置从文件中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com