簡體   English   中英

Bash格式HEX字符串

[英]Bash Format HEX string

任何人都知道標准的unix命令來格式化正在運行的SHA1十六進制字符串,如下所示

344F9DA1EA1859437077CCA38923C67797BDB8F6

進入這個:

344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6

喜歡:

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | awk ...

這是sed的一個選項:

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

(替換任何8個字符的序列本身加一個空格)

要在每八個字符后添加一個空格,請嘗試:

如果內容位於名為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

你可以在沒有管道的情況下在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

另一個:

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

怎么樣

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)    )
    }
 '

我希望這有幫助。

使用純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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM