[英]Strip bash script from beginning of gzip file
我有一系列由bash脚本组成的文件,最后连接了一个gzip文件。
我想要一种剥离主导bash的方法,留下一个纯粹的gzip文件。
我提出的方法是:
sed
删除gzip幻数1f 8b
之前的所有内容; 即
xxd -c1 -p input | tr "\n" " " | sed 's/^.*?1f 8b/1f 8b' | xxd -r -p > output
乍一看似乎没问题。 但是,如果文件的gzip部分恰好包含除初始头部之外的字节序列1f 8b
,它就会崩溃。 在这些情况下,它会在最后一次出现之前删除所有内容
我最初的尝试是在正确的轨道上,我该怎么做才能解决它? 还是有一个更好的方法来做到这一点,我错过了?
Perl解决方案。 它将记录分隔符设置为魔术序列并打印除第一个记录之外的所有记录。 魔术序列必须在开头添加,否则,它将与bash脚本一起丢失,这是第一个记录。
perl -ne 'BEGIN { $/ = "\x1f\x8b"; print $/; } print if $. != 1' input > output.gz
我会使用sed行范围功能来实现这一目标。 -n
抑制正常打印,并且该范围/\\x1f\\x8b/,$
将匹配后的每一行和包括第一次与\\ X1F \\ x8b在它和p
RINT出来。
sed -n '/\x1f\x8b/,$ p'
或者,根据您的喜好,您可以添加文本标记“### BEGIN GZIP DATA ###”并删除之前和之后的所有内容:
sed '1,/### BEGIN GZIP DATA ###/ d'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.