2014-07-23 82 views
3

有沒有在字符串末尾插入冒號4個字符的方法?例如,我有0x2aab3f439000,我需要0x2aab3f43:9000在BASH中的字符串末尾插入一個字符4個字符

感謝

+0

如果這將會是一個文件,那麼你可以使用SED,但如果它只是一個字符串變量,那麼你就可以輕鬆地嘗試:A = 0x2aab3f439000;後綴= 「:9000」;一個= $ {A} $ {後綴}; echo $ a; #這個假設你知道後綴變量的值。 –

回答

6

使用sed的,你可以這樣做:概念

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

謝謝你是最好的! –

+1

+1 sed-fu。 :) – zx81

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

證明:

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

有這樣做當然是更優雅的方式,但爲了清晰起見,很難打敗它。

+1

抱歉的人,但調用3個外部程序(head,wc,tail)4x分叉子不是一個非常有效的方法...;) – jm666

+0

@ jm666「Effective」是一個相對術語。這是我想到的第一種方式。以另一種方式思考將需要更多的時間比將被保存。如果我想節約資源,首先我不會使用bash。如果我只需要在腳本中添加一個冒號,那麼無論如何,這段代碼的自明性(對我來說)會比浪費時間查看sed或awk文檔更好。 –

+0

@ jm666否則,我同意你的看法。如果您正在瀏覽一個文件並需要執行此操作10,000次,那麼我的解決方案就不太好。雖然它肯定會緩存友好, 'wc','head'和'tail'都是小程序。 –

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

替代(從格倫傑克曼):

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

+1僅適用於bash。這更可讀:'echo「$ {s%????}:$ {s:-4}」' –

1

a=0x2aab3f439000

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

輸出:

0x2aab3f43:9000

1

的其它純bash的答案:

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