输出文件,每行一个字节,十六进制格式(在linux bash下)

Oli*_* R. 4 bash hexdump output

正如标题所说,这是一个例子:

$ cat test.txt 
ABCD
$ hd test.txt 
00000000  41 42 43 44 0a                                    |ABCD.|
00000005
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

41
42
43
44
Run Code Online (Sandbox Code Playgroud)

我知道这可以用sed,awk和stuff,但对于大文件来说这可能会非常慢.我想到了"hexdump"的格式字符串或"od"的参数组合.你能帮帮我吗?

Joh*_*ica 10

$ echo -n 'ABCD' | hexdump -v -e '/1 "%02x\n"'
41
42
43
44
0a
Run Code Online (Sandbox Code Playgroud)

如果您不希望它0a在换行结束时打印,那么我建议先从文件中删除换行符.


Wal*_*oss 6

od -An -vtx1 -w1 test.txt | cut -c2-
Run Code Online (Sandbox Code Playgroud)

如果您不想换行:

od -An -vtx1 -w1 test.txt | cut -c2- | fgrep -v 0a
Run Code Online (Sandbox Code Playgroud)

od选项的含义:

  • -An :地址:没有
  • -v:详细,即不要写一个*而不是重复的行
  • -tx1:输出类型:十六进制,1个字节(-tx1z用于类似hd输出)
  • -w1 :最大宽度:1

一个好处od是它可以在任何*x系统上使用.