2013-05-13 56 views
0

我試圖做一些比較簡單的,但我不知道該怎麼做之間的行尾。擊:使用SED更換子

我有一個MAC地址如下:

xx:yy:yy:zz:yy:yy 

我想修改:YY:在字符串的結尾,使之成爲:01: 使用上面的例子中,就變成:

xx:yy:yy:zz:01:yy 

基本上是最後一個字符::在字符串中。

我嘗試以下,但它不工作:

echo "$var" | sed 's/:*:*$/:01:/' 

我知道這是一個簡單的問題,但任何幫助,將不勝感激請。

+0

'*'是一個glob模式。你想要的正則表達式相當於'。*' – jthill 2013-05-13 22:20:57

回答

2

AWK是比較容易解決這樣的問題:

awk -F: -v OFS=":" '$5="01"' 

例如:

kent$ echo "xx:yy:yy:zz:yy:yy"|awk -F: -v OFS=":" '$5="01"' 
xx:yy:yy:zz:01:yy 
+0

真棒,這是非常容易得多,非常感謝你! – user1777907 2013-05-13 22:33:47

+0

+1用於暗示非sed解決方案。 – 2013-05-13 23:06:14

+0

這隻適用於確實有5個':'s – user123444555621 2013-05-14 06:21:36

2

假設你有最後的後兩個字符:,答案是:

echo xx:yy:yy:zz:yy:yy | sed 's/\(.*:\).*\(:..\)$/\101\2/' 

如果你覺得我的假設是錯誤的,我可以改善它。

+0

非常感謝你,這是完美的! – user1777907 2013-05-13 22:32:27

+0

改進:'sed的-r 'S /:[^:] +([^:] *)$ /:01:\ 1 /'' – user123444555621 2013-05-14 06:18:48

1
echo "$var" | sed 's/[^:]*/01/5' 
+1

或者'sed's/[^:] */01/5'<<<「$ var」' – potong 2013-05-14 05:56:21