从hexdump输出中删除第一列

时间:2018-05-26 09:15:59

标签: bash

我有一个看起来像这样的

的hexdump输出
0101f10   64534   64943   00568   00262   01077   00721   00297   00140
0101f20   00748   00288   02211   01124   02533   01271   02451   00997
0101f30   03056   01248   02894   01026   02397   00696   00646   65114
0101f40   00943   64707   01113   64179   01135   64179   00805   64109
0101f50   00514   64045   64654   63037   63026   62014   62173   61625

我想删除第一列,但我不知道hexdump命令使用了什么分隔符。我尝试用awk切割,但无法弄明白。任何帮助表示赞赏。

我想要的输出是

64534   64943   00568   00262   01077   00721   00297   00140
00748   00288   02211   01124   02533   01271   02451   00997
03056   01248   02894   01026   02397   00696   00646   65114
00943   64707   01113   64179   01135   64179   00805   64109
00514   64045   64654   63037   63026   62014   62173   61625

5 个答案:

答案 0 :(得分:1)

使用sed

hexdump /path/to/file |  awk '{sub(/[^ ]+ /, ""); print $0}'

使用gnu sed

sed 's/[^[:blank:]]*[[:blank:]]*//' infile

答案 1 :(得分:0)

input... | sed -E $'s/ +/\t/g' | cut -f2-

(假设$'\t'为Bash,但GNU sed无论如何都直接支持\t。)

答案 2 :(得分:0)

scanf("%s", country);  // Note, no address-of operator

这将完成这项工作。

答案 3 :(得分:0)

如果分隔符实际上是一堆空格,请使用tr 挤压重复-s)psace到选项卡并使用cut摆脱第一列:

$ cat file | tr -s ' ' '\t' | cut -f 2-
64534   64943   00568   00262   01077   00721   00297   00140
00748   00288   02211   01124   02533   01271   02451   00997
03056   01248   02894   01026   02397   00696   00646   65114
00943   64707   01113   64179   01135   64179   00805   64109
00514   64045   64654   63037   63026   62014   62173   61625

答案 4 :(得分:0)

上述所有解决方案都可以正常使用,只需添加 awk 解决方案。

所以,你只需要省略第一列,但得到其余部分,你可以试试这个:

awk '{$1=""; print $0}' /path/to/hexfile

它完美无缺,除了它在每行的开头留下一个空格。如果这让您感到困扰,可以使用substr()本身中的 awk 功能解决方法。

awk '{$1=""; print substr($0,2)}' /path/to/hexfile

要了解更多可能的方法, follow this link