试图用 /dev/random 十六进制替换两个字符串
Attempting to replace two character string with /dev/random hex
示例字符串
CA DA 00 17 11 38 88 C5 03
期望的输出
AB 3C 6C 8F DA 88 24 78 6C
尝试的命令
$ tr -dc 0-9A-F < /dev/urandom filename ## prints too many chars
awk '{gsub(length()==2,{printf "%02")}}' filename ## syntax doesn't work, unsure how to add hex
$ sed 's/[a-z0-9]\{2\}//g' filename ## only replaces digits, unsure how to add hex as a replacement
我最终使用 vim 对某种程度的随机化进行了部分转换。
:s/\d\d/AA/g
谁能提供可行的解决方案?
很高兴看到利用 tr/awk/sed 进行知识共享的解决方案(和解释)。
谢谢。
用 awk 将每个字段替换为随机的 2 位十六进制数只是:
$ awk -v seed="$RANDOM" 'BEGIN{srand(seed)} {for (i=1; i<=NF; i++) $i=sprintf("%02X",rand()*256)} 1' file
C7 A1 02 1A 4A 94 95 A0 1E
$ awk -v seed="$RANDOM" 'BEGIN{srand(seed)} {for (i=1; i<=NF; i++) $i=sprintf("%02X",rand()*256)} 1' file
1C 50 A9 D3 8B B0 24 9C 14
希望它的作用非常明显。
这里有一个关于如何获得随机十六进制的想法(mac 地址?)
awk -v seed=$RANDOM '
BEGIN{
srand(seed);
split("0 1 2 3 4 5 6 7 8 9 A B C D E F",hex," ");
for (i=1; i<=6; i++)
printf "%s%s ",hex[int(rand()*16)+1],hex[int(rand()*16)+1];
print ""
}'
D8 D9 BA 00 6A C6
示例字符串
CA DA 00 17 11 38 88 C5 03
期望的输出
AB 3C 6C 8F DA 88 24 78 6C
尝试的命令
$ tr -dc 0-9A-F < /dev/urandom filename ## prints too many chars
awk '{gsub(length()==2,{printf "%02")}}' filename ## syntax doesn't work, unsure how to add hex
$ sed 's/[a-z0-9]\{2\}//g' filename ## only replaces digits, unsure how to add hex as a replacement
我最终使用 vim 对某种程度的随机化进行了部分转换。
:s/\d\d/AA/g
谁能提供可行的解决方案?
很高兴看到利用 tr/awk/sed 进行知识共享的解决方案(和解释)。
谢谢。
用 awk 将每个字段替换为随机的 2 位十六进制数只是:
$ awk -v seed="$RANDOM" 'BEGIN{srand(seed)} {for (i=1; i<=NF; i++) $i=sprintf("%02X",rand()*256)} 1' file
C7 A1 02 1A 4A 94 95 A0 1E
$ awk -v seed="$RANDOM" 'BEGIN{srand(seed)} {for (i=1; i<=NF; i++) $i=sprintf("%02X",rand()*256)} 1' file
1C 50 A9 D3 8B B0 24 9C 14
希望它的作用非常明显。
这里有一个关于如何获得随机十六进制的想法(mac 地址?)
awk -v seed=$RANDOM '
BEGIN{
srand(seed);
split("0 1 2 3 4 5 6 7 8 9 A B C D E F",hex," ");
for (i=1; i<=6; i++)
printf "%s%s ",hex[int(rand()*16)+1],hex[int(rand()*16)+1];
print ""
}'
D8 D9 BA 00 6A C6