2013-03-04 70 views
0

我可能在這裏缺少一些基本的東西。我想刪除下列字符串中&之間的所有'。'。我應該在我的sed中使用哪些正則表達式?sed刪除'。'只在字符串的一部分

**&v15.0&** something.anything abc.deg 
**&v15.03.15&** something.anything abc.deg 
**&v15.01.16.01&** something.anything abc.deg 
**&v15.000.155.123.125&** something.anything abc.deg 

修改爲: '的withing的& '

**&v150&** something.anything abc.deg 
**&v150315&** something.anything abc.deg 
**&v15011601&** something.anything abc.deg 
**&v15000155123125&** something.anything abc.deg 

可以有任意數量的S,我不希望S中' 的&之外的。'被修改。

感謝您的幫助。

回答

2

試試這個oneliner:

awk -F'&' '{gsub(/\./,"",$2)}1' file 

如果你真的想用sed來做到這一點,你必須牛羚的sed,你可以這樣做:

sed -r 's/([^&]*&)([^&]*)(&.*)/echo "\1"$(echo "\2"\|sed "s#\\.##g")"\3"/ge' file 

測試sed的行:

kent$ echo "**&v15.0&** something.anything abc.deg 
**&v15.03.15&** something.anything abc.deg 
**&v15.01.16.01&** something.anything abc.deg 
**&v15.000.155.123.125&** something.anything abc.deg"|sed -r 's/([^&]*&)([^&]*)(&.*)/echo "\1"$(echo "\2"\|sed "s#\\.##g")"\3"/ge' 
**&v150&** something.anything abc.deg 
**&v150315&** something.anything abc.deg 
**&v15011601&** something.anything abc.deg 
**&v15000155123125&** something.anything abc.deg 
+0

這正是我所需要的。我最好用這個awk。謝謝。 – SkypeMeSM 2013-03-04 17:51:19

+0

@SkypeMeSM我添加了一個sed(gnu sed)解決方案,你可以選擇一個你喜歡的。 – Kent 2013-03-04 17:54:43

+1

雖然你接受了我的回答,但我會提到的是,我的答案中的兩個解決方案只有在你的字符串只有一個'&....&'部分時才起作用。如果你的真實文本有更多'&...&'部分,腳本需要改變。 – Kent 2013-03-05 00:32:02

1

使用常規sed(也是非GNU)嘗試:

sed -e :a -e 's/\(&.*\)\.\(.*&\)/\1\2/; ta' file