如何使用xxd逐行生成十六进制转储?

3
使用cat命令创建示例文件。
cat > /tmp/test.txt <<EOF
> X1
> X22
> X333
> X4444
> EOF

检查示例文件中的内容。

cat  /tmp/test.txt
X1
X22
X333
X4444

使用xxd进行十六进制转储。
xxd   /tmp/test.txt
0000000: 5831 0a58 3232 0a58 3333 330a 5834 3434  X1.X22.X333.X444
0000010: 340a  

如何使用xxd逐行制作十六进制转储,如下所示:
58 31 0a
58 32 32 0a
58 33 33 33 0a
58 34 34 34 34 0a
3个回答

3
$ xxd  -ps </tmp/test.txt|sed -e 's/\(..\)/\1 /g' -e 's/0a /0a\n/g'
58 31 0a
58 32 32 0a
58 33 33 33 0a
58 34 34 34 34 0a 

对于第一个提出这种解决方案的人来说,给你点赞!接受投票应该是你的! - hek2mgl
我已经测试了其他长文件,对于长文件来说不够稳定。 - showkey
有多长?我的意思是以字节为单位的大小,还是以行数为单位? - hek2mgl
请下载并保存为/home/urls.csv,使用**xxd -ps </home/urls.csv|sed -e 's/(..)/\1 /g' -e 's/0a /0a\n/g'**进行测试。 - showkey
我明白了,谢谢提供测试文件。现在清楚了!是的,在这种情况下答案是错误的,因为xxd -ps会将行限制在60个字符。 - hek2mgl

2

在尝试了多种方法后,我发现结合使用hexdump工具和sed是最好的解决方案:

hexdump -v -e '/1 "%02x "' /tmp/test.txt | sed 's/0a /0a\n/g'

它是xargs -I'{}' bash -c 'xxd <<< "${1}"' -- '{}' < /tmp/test.txt,而不是xargs -I'{}' bash -c 'xxd <<< "${1}" -- '{}' < /tmp/test.txt - showkey
你是什么意思? - hek2mgl
在你的第二个回答中,有一个 ' 丢失了,应该是 "${1}"' ,而不是 "${1}" - showkey
啊,我明白了!:D 哎呀,那真是难以理解。:) ... 不管怎样,看起来xargs的方法根本不是个好主意。 - hek2mgl

0
请下载它并保存为 /home/urls.csv。
请使用测试的示例文件进行测试。
要进行测试,请使用以下命令:
hexdump -v -e '/1 "%02x "' /home/urls.csv | sed 's/0a /0a\n/g'

enter image description here

用以下方式进行测试
xargs -I'{}' bash -c 'xxd <<< "${1}"' -- '{}' < /home/urls.csv

enter image description here

要进行测试
xargs -I'{}' bash -c 'hd <<< "${1}"' -- '{}' < /home/urls.csv enter image description here

要进行测试

xxd  -ps </home/urls.csv |sed -e 's/\(..\)/\1 /g' -e 's/0a /0a\n/g'

很明显,Ipor Sircer的答案对于长文件来说不够稳健。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接