有没有办法在字符串结尾之前插入冒号4个字符?例如,我有0x2aab3f439000,我需要0x2aab3f43:9000
由于
答案 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
有一些更优雅的方法可以做到这一点,但为了清晰起见,很难打败它。