我有一个文件(可能是二进制文件),其中包含大部分不可打印的ASCII字符,如下所示,这是八进制转储实用程序的输出。
od -a MyFile.log
0000000 cr nl esc a soh nul esc * soh L soh nul nul nul nul nul
0000020 nul soh etx etx etx soh nul nul nul nul nul nul nul nul nul nul
0000040 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
*
0000100 nul nul nul nul nul soh etx etx etx nul nul nul nul nul nul nul
0000120 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
0000140 nul nul nul nul nul nul nul nul soh etx etx etx soh nul nul nul
0000160 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
0000200 nul nul nul nul nul nul nul nul nul nul nul soh etx etx etx etx
0000220 etx soh etx etx etx etx etx etx etx soh etx etx etx etx etx etx
0000240 etx soh etx etx etx etx etx soh soh soh soh soh nul nul nul nul
0000260 nul nul nul nul nul nul nul nul nul nul nul nul nul nul etx etx
0000300 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
我想要实现以下内容:
将文件解析或分割成类似段落的部分,以字符
esc
,fs
,gs
和us
(ASCII编号27, 28, 29和31)中的任何一个开头。输出文件应包含可读的ASCII字符,如八进制转储。
将结果存储在文件中。
谢谢。
编辑:我已经使用八进制转储实用程序命令
od -A n -a -v MyFile.log
,以删除文件中的偏移量,如下所示: cr nl esc a soh nul esc * soh L soh nul nul nul nul nul
nul soh etx etx etx soh nul nul nul nul nul nul nul nul nul nul
nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
nul nul nul nul nul soh etx etx etx nul nul nul nul nul nul nul
nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
nul nul nul nul nul nul nul nul soh etx etx etx soh nul nul nul
nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
nul nul nul nul nul nul nul nul nul nul nul soh etx etx etx etx
etx soh etx etx etx etx etx etx etx soh etx etx etx etx etx etx
etx soh etx etx etx etx etx soh soh soh soh soh nul nul nul nul
nul nul nul nul nul nul nul nul nul nul nul nul nul nul etx etx
我想将这个文件传输到其他实用程序中,例如awk。
od -a -An -v file | perl -0777ne 's/\n//g,print "$_\n " for /(?:esc| fs| gs| us)?(?:(?!esc| fs| gs| us).)*/gs'
- ninjalj