使用命令:
xxd -b some_text
将输出二进制表示和原始文本:
000054c: 11101111 10100001 10110110 00010000 01011011 10000110 ....[.
0000552: 01111000 11001000 01010101 11000101 11101111 10101111 x.U...
0000558: 10010111 11101010 00011001 01010100 10101010 10001110 ...T..
如何让实用程序仅输出二进制文件而不输出任何其他内容?
如果您只想要二进制文件,甚至不需要偏移量,您可以扩展 Thomas Dickey 的
sed
单行代码来去除偏移量:
xxd -b some_text | sed -e 's/^.*: //; s/[[:space:]][[:space:]]*.\{6,6\}$//'
该组合未在其手册页中列出。但是,您可以使用 awk/sed/perl (您的选择)过滤结果。对于给定的示例,sed 就足够了:
xxd -b some_text | sed -e 's/^[^:]*:[[:space:]][[:space:]]*//' -e 's/[[:space:]][[:space:]]*.\{6,6\}$//'
即:
在第一个“-e”选项中,通过第一个“:”删除所有内容,然后是空格。
在第二个“-e”选项中,至少以一个空格开头
您可以将“[[:space:]][[:space:]]*”替换为您想要匹配的空格数量,但虽然更冗长,但字符类也更强大。
另一种方法(因为空格是 awk 中的默认字段分隔符),可以通过 awk 进行管道传输:
xxd -b some_text | awk '{ printf "%s %s %s %s %s %s\n", $2, $3, $4, $5, $6, $7 }'
尽管我通常使用最简单的有效工具。
“xxd”不接受“some_text”作为输入,而是接受“infile”。
使用“cut”命令打印 6 个字段(2 到 7)的更短答案:
xxd -b some_file | cut -d\ -f2-7
尝试一下
xxd -b some_file > /tmp/output
cut -d: -f2 |egrep "[01 ]+"