Bash 二进制输出格式

Bash 二进制输出格式,bash,binary,format,Bash,Binary,Format,我尝试使用BIN=$(echo“obase=2;ibase=16;$I”| bc)进行转换。 我的输出是示例1000000000011110000110010。我需要的工作(查看检查)与第十一位从结束。 我需要输出格式为(ex):1000 0010 0000 1111…… 你能寻求帮助吗?谢谢使用Ruby One Liner 如果您只想将二进制文件分割成4位数的块,那么可以使用理解{}区间运算符的任何语言。sed和awk的里程可能会有所不同,但perl和ruby始终支持该操作符 当然还有其他方法

我尝试使用
BIN=$(echo“obase=2;ibase=16;$I”| bc)
进行转换。 我的输出是示例
1000000000011110000110010
。我需要的工作(查看检查)与第十一位从结束。 我需要输出格式为(ex):
1000 0010 0000 1111……

你能寻求帮助吗?谢谢

使用Ruby One Liner 如果您只想将二进制文件分割成4位数的块,那么可以使用理解
{}
区间运算符的任何语言。sed和awk的里程可能会有所不同,但perl和ruby始终支持该操作符

当然还有其他方法可以做同样的事情,但有些方法比其他方法更具可读性。Ruby为这种字符串操作提供了一种非常干净且可维护的语法

代码 输出
使用以下命令以4块打印$BIN

format=`echo %0$(((${#BIN}%4 ? ${#BIN}/4 + 1 : ${#BIN}/4) * 4))d`
printf $format $BIN | sed 's/.\{4\}/& /g'
在第一行中,我们使用

${#BIN}

然后在同一行中形成格式说明符

例如

0101-%04d
1-%04d
10010-%08d

printf使用$format中获得的格式说明符打印前缀为0的二进制值,使字符串长度为4的倍数

然后,“sed”命令将字符串分成4个块

1000 0001 0000 0011 1100 0011 0000
format=`echo %0$(((${#BIN}%4 ? ${#BIN}/4 + 1 : ${#BIN}/4) * 4))d`
printf $format $BIN | sed 's/.\{4\}/& /g'