$ printf '%d.%d.%d.%d\n' $(echo 80D00297 | sed 's/../0x& /g')
128.208.2.151
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
sed 用于重新格式化数字:
$ echo 80D00297 | sed 's/../0x& /g'
0x80 0xD0 0x02 0x97
Run Code Online (Sandbox Code Playgroud)的%d格式printf用于将十六进制数转换为十进制数。
$ echo 80D00297 | gawk --non-decimal-data '{for (i=1;i<=NF;i++) printf "%d%s","0x"$i,(i==NF?"\n":".")}' FPAT='..'
128.208.2.151
Run Code Online (Sandbox Code Playgroud)
这用于FPAT='..'将输入分成两个字符字段。然后我们循环遍历每个字段,0x在它前面放一个,并printf用%d格式输入它,以便将十六进制数转换为十进制数。
上面一个看似复杂的部分是三元语句(i==NF?"\n":".")。如果我们在最后一个字段,则此语句返回一个换行符i==NF。对于 的其他值i,它返回一个句点.。这样,数字用句点分隔,但最后一个数字后跟一个换行符。
| 归档时间: |
|
| 查看次数: |
9534 次 |
| 最近记录: |