Hexdump转换字符串由格式字符串中的转义字符包围

时间:2015-12-07 23:18:51

标签: shell command-line hexdump

我想从hexdump获得以下结果:

    78      79      7a

"\t78\t\t79\t\t7a\t"

尝试

echo -n xyz | hexdump -e '1/1 "\t%x\t"'

导致错误:

hexdump: %  : bad conversion character

但是

echo -n xyz | hexdump -e '1/1 "|%x|"'

正确收益

|78||79||7a|

添加空格:

echo -n xyz | hexdump -e '1/1 "\t %x \t"'

某事

    t 78        t 79        t 7a    

这是"\tt 78\t\tt 79\t\tt 7a\t",但我得到了所需的标签文字t以及一些不需要的空格字符。

仅使用单个尾随标签

时有效
echo -n xyz | hexdump -e '1/1 "%x\t"'

给了我

78  79  7a  

"78\t79\t7a\t",但不是单个主要标签

echo -n xyz | hexdump -e '1/1 "\t%x"'

这给了我另一个错误

hexdump: %A: bad conversion character

我不确定该错误来自哪里,因为任何地方都没有%A

根据手册页,\t应该是受支持的转义序列,我将其视为printf中的任何其他字符。

  

格式是必需的,必须用双引号括起来(“”)        分数。它被解释为fprintf样式的格式字符串(请参阅        fprintf(3)),但有以下例外:

 +o   An asterisk (*) may not be used as a field width    or precision.

 +o   A byte count or field precision is required for each ``s'' con-
     version character (unlike the fprintf(3) default which prints
     the entire string if the precision is unspecified).

 +o   The conversion characters ``h'',    ``l'', ``n'', ``p'' and ``q''
     are not supported.

 +o   The single character escape sequences described in the C    stan-
     dard are supported:

      NUL                 \0
      <alert character>   \a
      <backspace>         \b
      <form-feed>         \f
      <newline>           \n
      <carriage return>   \r
      <tab>               \t
      <vertical tab>      \v

1 个答案:

答案 0 :(得分:2)

此行为is actually a fixed, not so long ago, bug。对于受影响的版本,有一种解决方法:只需将前导反斜杠放入单独的格式字符串中。

例如,您想要的代码如下:

echo -n xyz | hexdump -e '"\t" 1/1 "%x"'