如何使用hexdump同时显示不同演示文稿中的字符
How to use hexdump to show charaters in different presentations at the same time
我统计的是文件的字符数和整个目录的目录名。
find . -printf "%f/n" | sed 's/./&\n/g' | sort | uniq -c
输出:
234 _
162 /
341 .
342 0
156 1
217 2
99 3
...
但我还需要一个十进制列表,十六进制列表和同时找到的字符的正常表示:
示例:
066 0x42 'A'
...
090 0x5A 'Z'
我已经尝试 hexdump
使用不同的格式选项,但这对我不起作用。
可以用hexdump完成吗?
Can it be done with hexdump?
是:
find . -printf "%f/n" |
hexdump -v -e '/1 "%03d "' -e '/1 "0x%02X "' -e '/1 "%c\n"'
请参阅 hexdump
手册页末尾的示例。
这是我在你回答后的实现:
find . -printf "%f\n" | sed "s/./&\n/g" | sort | uniq | tr -d '\n' | hexdump -v -e '/1 "%03d "' -e '/1 "0x%02X "' -e '/1 "<%c>\n"'
输出:
060 0x3C <<>
062 0x3E <>>
058 0x3A <:>
063 0x3F <?>
046 0x2E <.>
097 0x61 <a>
098 0x62 <b>
099 0x63 <c>
100 0x64 <d>
101 0x65 <e>
069 0x45 <E>
102 0x66 <f>
104 0x68 <h>
072 0x48 <H>
105 0x69 <i>
108 0x6C <l>
109 0x6D <m>
110 0x6E <n>
078 0x4E <N>
111 0x6F <o>
195 0xC3 <�>
182 0xB6 <�>
...
hexdump/hd 的替代方法是 xxd。 xxd 可以转换为十六进制并返回。但是我警告你使用 32 位数据和 XOR 我注意到一个错误,我得到的是 46 而不是 41。还有一个用于大写和小写十六进制的选项,默认情况下是 BIG ENDIAN 但有一个 LITTLE ENDIAN 选项并记住输出是一个字符字符串而不是十六进制等价物。
我认为 hexdump -C
命令是您要查找的内容,请参阅 man hexdump
或 man xxd
。
PS> @Dummy00001 hexdumps "/1" 是做什么的?如果我省略它,我会得到相同的结果
@ebart 为什么在你的 sed 脚本替换操作中有一个 'g' 字符在行尾用 \n 替换每个字符(&):"s/./&\n/g"
来自下面的 link:
X/X 格式称为计数说明符,因此 2/4 表示 4 字节(32 位)值的 2 个实例。 %08x 格式表示将值输出为带前导零的 8 位十六进制数。
此命令不是您问题的答案,而是显示 hexdump 格式化是如何完成的:
hexdump -s 446 -n 64 -v -e '1/1 "%02x" 3/1 " %3d" 1/1 " %02x" 3/1 " %3d" 2/4 "
我统计的是文件的字符数和整个目录的目录名。
find . -printf "%f/n" | sed 's/./&\n/g' | sort | uniq -c
输出:
234 _ 162 / 341 . 342 0 156 1 217 2 99 3 ...
但我还需要一个十进制列表,十六进制列表和同时找到的字符的正常表示:
示例:
066 0x42 'A' ... 090 0x5A 'Z'
我已经尝试 hexdump
使用不同的格式选项,但这对我不起作用。
可以用hexdump完成吗?
Can it be done with hexdump?
是:
find . -printf "%f/n" |
hexdump -v -e '/1 "%03d "' -e '/1 "0x%02X "' -e '/1 "%c\n"'
请参阅 hexdump
手册页末尾的示例。
这是我在你回答后的实现:
find . -printf "%f\n" | sed "s/./&\n/g" | sort | uniq | tr -d '\n' | hexdump -v -e '/1 "%03d "' -e '/1 "0x%02X "' -e '/1 "<%c>\n"'
输出:
060 0x3C <<>
062 0x3E <>>
058 0x3A <:>
063 0x3F <?>
046 0x2E <.>
097 0x61 <a>
098 0x62 <b>
099 0x63 <c>
100 0x64 <d>
101 0x65 <e>
069 0x45 <E>
102 0x66 <f>
104 0x68 <h>
072 0x48 <H>
105 0x69 <i>
108 0x6C <l>
109 0x6D <m>
110 0x6E <n>
078 0x4E <N>
111 0x6F <o>
195 0xC3 <�>
182 0xB6 <�>
...
hexdump/hd 的替代方法是 xxd。 xxd 可以转换为十六进制并返回。但是我警告你使用 32 位数据和 XOR 我注意到一个错误,我得到的是 46 而不是 41。还有一个用于大写和小写十六进制的选项,默认情况下是 BIG ENDIAN 但有一个 LITTLE ENDIAN 选项并记住输出是一个字符字符串而不是十六进制等价物。
我认为 hexdump -C
命令是您要查找的内容,请参阅 man hexdump
或 man xxd
。
PS> @Dummy00001 hexdumps "/1" 是做什么的?如果我省略它,我会得到相同的结果 @ebart 为什么在你的 sed 脚本替换操作中有一个 'g' 字符在行尾用 \n 替换每个字符(&):"s/./&\n/g"
来自下面的 link: X/X 格式称为计数说明符,因此 2/4 表示 4 字节(32 位)值的 2 个实例。 %08x 格式表示将值输出为带前导零的 8 位十六进制数。
此命令不是您问题的答案,而是显示 hexdump 格式化是如何完成的: hexdump -s 446 -n 64 -v -e '1/1 "%02x" 3/1 " %3d" 1/1 " %02x" 3/1 " %3d" 2/4 "