1

使用命令:

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

我怎样才能让实用程序只输出二进制文件而没有其他任何东西?

4

3 回答 3

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 }'

虽然通常我使用最简单的工具。

于 2015-03-09T01:19:33.433 回答
0

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

xxd -b some_text | sed -e 's/^.*: //; s/[[:space:]][[:space:]]*.\{6,6\}$//'
于 2015-03-09T05:46:32.400 回答
0

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

xxd -b some_file | cut -d\  -f2-7
于 2016-02-14T18:54:05.537 回答