Bash模式字符串转换

时间:2015-03-14 12:10:12

标签: bash

我们说我们有以下字符串:

aabbccddeeff

如何将此字符串转换为:

AA:BB:CC:DD:EE:FF

可以使用正则表达式或更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

在替换部分使用&来引用所有匹配的字符。

$ echo 'aabbccddeeff' | sed 's/.*/\U&/;s/\(..\)/\1:/g;s/:$//'
AA:BB:CC:DD:EE:FF

答案 1 :(得分:2)

仅限Bash的解决方案,作为单行:

str=${str^^*} ; for (( i=0 ; i<${#str} ; i+=2 )) ; do [[ i -ne 0 ]] && echo -n ":" ; echo -n ${str:i:2} ; done ; echo

并扩展:

# convert string to uppercase:
str=${str^^*}

# loop through each pair of characters:
for (( i=0 ; i<${#str} ; i+=2 ))
do 
  # if it is not the first pair, add a leading colon:
  [[ i -ne 0 ]] && echo -n ":"
  # print this part of the string:
  echo -n ${str:i:2}
done
# add a newline:
echo

请阅读此内容作为Bash可以做什么的演示。像这样的代码不可移植,可能比其他解决方案的可维护性稍差。它提供了更好的性能,但这通常不是问题。