2015-12-07 110 views
1

我想從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中的任何其他字符對待。

The format is required and must be surrounded by double quote (" ") marks. It is interpreted as a fprintf-style format string (see fprintf(3)), with the following exceptions:

+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 
+0

是否有可能你的shell會首先嚐試擴大單反斜線?即,嘗試使用雙反斜槓。 – usr2564301

+2

導致'\\ t'的錯誤。使用bash和整個arg是在一個單引號字符,因此*不應*做殼側的任何擴展。 – arcyqwerty

+1

'hexdump:%\:錯誤的轉換字符'同時使用'\\ t%x \\ t' – arcyqwerty

回答

2

此行爲is actually a fixed, not so long ago, bug。對於受影響的版本,有一種解決方法:只需將前導反斜槓放入單獨的格式字符串中即可。

例如,你想要的代碼是這樣:

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