Bash格式HEX字符串

时间:2011-03-14 21:55:17

标签: bash shell string formatting

任何人都知道标准的unix命令来格式化正在运行的SHA1十六进制字符串,如下所示:

344F9DA1EA1859437077CCA38923C67797BDB8F6

进入这个:

344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6

像:

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | awk ...

6 个答案:

答案 0 :(得分:5)

以下是sed的一个选项:

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | sed -E 's/.{8}/& /g'

(替换8个字符的任何序列,加上一个空格)

答案 1 :(得分:4)

要在每八个字符后添加一个空格,请尝试:

如果内容位于名为FILENAME的文件中的一行中:

sed 's/.\{8\}/& /g' FILENAME 

或者,如果它们分成多行。同样,对于名为FILENAME的文件:

sed ':a;$!{N;s/\n//;ba;};s/.\{8\}/& /g' FILENAME

说明不同之处:

ezra@ubuntu:~$ cat test.file
344F9DA1EA1859437077CCA38923C67797BDB8F6
344F9DA1EA1859437077

ezra@ubuntu:~$ sed ':a;$!{N;s/\n//;ba;};s/.\{8\}/& /g' test.file
344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6 344F9DA1 EA185943 7077

ezra@ubuntu:~$ sed 's/.\{8\}/& /g' test.file
344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6
344F9DA1 EA185943 7077

答案 2 :(得分:3)

你可以在没有管道的情况下在bash中执行此操作。

bash$ FOO="344F9DA1EA1859437077CCA38923C67797BDB8F6"
bash$ echo ${FOO:0:8} ${FOO:8:8} ${FOO:16:8} ${FOO:24:8} ${FOO:32:8}
344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6

答案 3 :(得分:2)

另一个:

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | fold -b8 | tr "\n" " "

答案 4 :(得分:1)

怎么样

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" \
| awk '{
    printf("%s %s %s %s %s\n", 
      substr($0,1,8),  substr($0,9,8), substr($0,17,8), substr($0,25,8),
      substr($0,33,8), substr($0,41,8)    )
    }
 '

我希望这会有所帮助。

答案 5 :(得分:1)

使用纯Bash(3.2或更高版本):

hex=344F9DA1EA1859437077CCA38923C67797BD
p='(.{8})'; unset patt; for i in {1..5}; do patt+=$p; done
[[ $hex =~ $patt ]]
string=${BASH_REMATCH[@]:1}
echo "$string"    # output: 344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6