在 shell 中的字母数字字符串中每两个字母后添加一个冒号

adding a colon after every two letters in an alphanumeric string in shell

所以我有一个字母数字字符串 10006cc2190ab011 我试图在这个字母数字字符串中的每两个字母后添加一个冒号。

this is the string : 10006cc2190ab011 
i want it be - 10:00:6c:c2:19:0a:b0:11

提前致谢。

一个sed解决方案:

$ echo 10006cc2190ab011 | sed 's/../&:/g; s/:$//'
10:00:6c:c2:19:0a:b0:11

用同一对加 : 替换每对不重叠的字符。最后删除尾随 :(如果输入文本的长度为偶数)。

str=10006cc2190ab011; str="${str//??/${.sh.match}:}"; echo ${str%:}

在不使用外部命令的情况下进行相同的替换,仅使用 ksh-internals。

sed(另一个答案)中的操作相同。在 $str 中每隔 // 两个字符 ?? 替换为 / 匹配的字符串和一个 :(每个匹配都保存在 ksh 变量 ${.sh.match} 中)。然后打印 $str,去掉最后的 % ':'。