如何使用xxd命令输出无分隔符的纯十六进制字节内容
xxd逐字节输出无空格无换行十六进制的实现方法
可以实现该需求,仅调整columns参数无法达到目标,需要组合xxd的纯十六进制输出参数和文本清理命令使用。
实现命令
分两种适用场景:
- 处理本地文件/一次性输入
命令:xxd -p 输入源 | tr -d '\n '
示例:测试输入字符串abc时,执行echo -n "abc" | xxd -p | tr -d '\n ',输出结果为616263,完全不含空格、换行,末尾也无多余换行。 - 处理实时流式输入(实现逐字节读取、逐字节输出)
命令:stdbuf -i0 -o0 xxd -p | stdbuf -o0 tr -d '\n '
该命令关闭了输入输出缓冲,上游管道每传入1个字节,就会实时输出对应的2个十六进制字符,无任何多余格式。
参数说明
-p:xxd的纯十六进制输出模式,输出内容默认不带偏移量、ASCII对照列、字节间空格,仅保留十六进制字符和自动插入的换行符tr -d '\n ':删除输出中所有的换行符和空格,解决xxd默认每30字节插入1个换行的问题stdbuf -i0 -o0:关闭命令的输入、输出缓冲,满足实时逐字节处理的需求
单独调整columns参数无效的原因
仅设置-c(columns)参数无法达到目标:如果把-c设为极大值,只要输入总长度超过设置的列数,xxd还是会自动插入换行;如果把-c设为1逐行输出单字节的十六进制,反而会产生大量换行,必须搭配文本清理命令使用。
内容的提问来源于stack exchange,提问作者William Entriken
相关产品推荐
相关产品推荐

