2013-03-04 72 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