xxd 仅输出二进制文件

问题描述 投票:0回答:4

使用命令:

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..

如何让实用程序仅输出二进制文件而不输出任何其他内容?

linux binary xxd
4个回答
0
投票

如果您只想要二进制文件,甚至不需要偏移量,您可以扩展 Thomas Dickey 的

sed
单行代码来去除偏移量:

xxd -b some_text | sed -e 's/^.*: //; s/[[:space:]][[:space:]]*.\{6,6\}$//'

0
投票

该组合未在其手册页中列出。但是,您可以使用 awk/sed/perl (您的选择)过滤结果。对于给定的示例,sed 就足够了:

xxd -b some_text | sed -e 's/^[^:]*:[[:space:]][[:space:]]*//' -e 's/[[:space:]][[:space:]]*.\{6,6\}$//'

即:

  • 在第一个“-e”选项中,通过第一个“:”删除所有内容,然后是空格。

  • 在第二个“-e”选项中,至少以一个空格开头

  • 后跟 6 个字符(尚不清楚这些字符是否可以是空格,但测试似乎证实它们不是)
  • 去掉整个匹配的字符串

您可以将“[[:space:]][[:space:]]*”替换为您想要匹配的空格数量,但虽然更冗长,但字符类也更强大。

另一种方法(因为空格是 awk 中的默认字段分隔符),可以通过 awk 进行管道传输:

xxd -b some_text | awk '{ printf "%s %s %s %s %s %s\n", $2, $3, $4, $5, $6, $7 }'

尽管我通常使用最简单的有效工具。


0
投票

“xxd”不接受“some_text”作为输入,而是接受“infile”。
使用“cut”命令打印 6 个字段(2 到 7)的更短答案:

xxd -b some_file | cut -d\  -f2-7

-1
投票

尝试一下

xxd -b some_file > /tmp/output
cut -d: -f2 |egrep "[01 ]+"
© www.soinside.com 2019 - 2024. All rights reserved.