Bash Format HEX строка - PullRequest
2 голосов
/ 15 марта 2011

Любой знает стандартную команду unix для форматирования работающей шестнадцатеричной строки SHA1, например:

344F9DA1EA1859437077CCA38923C67797BDB8F6

в эту строку:

344F9DA1 EA185943 7077CCA3 8923C677 97BDB8F6

Как:

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | awk ...

Ответы [ 6 ]

5 голосов
/ 15 марта 2011

Вот один вариант с sed:

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

(заменить любую последовательность из 8 символов отдельно плюс один пробел)

4 голосов
/ 15 марта 2011

Чтобы добавить пробел после каждого восьмого символа, попробуйте:

Если содержимое находится в одной строке в файле с именем 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
3 голосов
/ 15 марта 2011

Вы можете сделать это в 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
2 голосов
/ 15 марта 2011

Еще один:

echo "344F9DA1EA1859437077CCA38923C67797BDB8F6" | fold -b8 | tr "\n" " "
1 голос
/ 15 марта 2011

Использование чистого 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
1 голос
/ 15 марта 2011

Как насчет

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

Надеюсь, это поможет.

...