在BASH中的字符串结尾之前插入一个字符4个字符

时间:2014-07-23 18:09:29

标签: linux string bash sed char

有没有办法在字符串结尾之前插入冒号4个字符?例如,我有0x2aab3f439000,我需要0x2aab3f43:9000

由于

5 个答案:

答案 0 :(得分:8)

使用sed你可以这样做:

s='0x2aab3f439000'
sed 's/.\{4\}$/:&/' <<< "$s"
0x2aab3f43:9000

答案 1 :(得分:3)

$ s=0x2aab3f439000
$ echo "${s:0:(${#s}-4)}:${s:(-4)}"
0x2aab3f43:9000

替代方案(来自格伦杰克曼):

echo "${s%????}:${s: -4}"

答案 2 :(得分:1)

a=0x2aab3f439000

echo ${a:0:-4}:${a#${a:0:-4}}

输出:

0x2aab3f43:9000

答案 3 :(得分:1)

另一个纯粹的bash回答:

sh$ V=0x2aab3f439000
sh$ echo ${V::(-4)}:${V:(-4)}
0x2aab3f43:9000

答案 4 :(得分:0)

RESULT="$( \
    echo -n $ORIG | head -c $(( $(echo -n "$ORIG" | wc -c) - 4)) && \
    echo -n : && \
    echo -n $ORIG | tail -c 4 \
)" 

概念证明:

me@ ~$ ORIG="hello world"
me@ ~$ RESULT="$( \
>     echo -n $ORIG | head -c $(( $(echo -n "$ORIG" | wc -c) - 4)) && \
>     echo -n : && \
>     echo -n $ORIG | tail -c 4 \
> )"
me@ ~$ echo "$RESULT"
hello w:orld

有一些更优雅的方法可以做到这一点,但为了清晰起见,很难打败它。