任何人都知道标准的unix命令来格式化正在运行的SHA1十六进制字符串,如下所示:
344F9DA1EA1859437077CCA38923C67797BDB8F6
进入这个:
344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6
像:
echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | awk ...
答案 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