我有一系列由 bash 脚本组成的文件,在这些文件的末尾连接了一个 gzip 文件。
我想要一种剥离前导 bash 的方法,留下一个纯 gzip 文件。
我想出的方法是:
- 对文件进行十六进制转储;
- 使用
sed
删除 gzip 魔数(Magic Number)1f 8b
之前的所有内容; - 将剩余的十六进制转储转换回二进制。
即
xxd -c1 -p input | tr "\n" " " | sed 's/^.*?1f 8b/1f 8b' | xxd -r -p > output
乍一看这似乎工作正常。但是,如果文件的 gzip 部分恰好包含字节序列 1f 8b
而不是初始 header ,它就会崩溃。在这些情况下,它会删除最后 出现之前的所有内容。
我最初的尝试是否走在正确的轨道上,我可以做些什么来解决它?还是有我错过的更好的方法?
最佳答案
我会使用 sed 行范围功能来完成此操作。 -n
禁止正常打印,范围 /\x1f\x8b/,$
将匹配第一行之后的每一行,包括第一行,其中包含\x1f\x8b 和 p
将它们打印出来。
sed -n '/\x1f\x8b/,$ p'
或者,根据您的喜好,您可以添加文本标记“### BEGIN GZIP DATA ###”并删除之前和包括它的所有内容:
sed '1,/### BEGIN GZIP DATA ###/ d'
关于linux - 从 gzip 文件的开头剥离 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399348/