0

我可能在这里遗漏了一些基本的东西。我想删除以下字符串中 & 之间的所有 '.'。我应该在我的 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

修改为:

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

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

谢谢你的帮助。

4

2 回答 2

2

试试这个oneliner:

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

如果你真的想用 sed 来做,并且你有Gnu 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
于 2013-03-04T17:49:12.373 回答
1

使用常规sed(也非 GNU)尝试:

sed -e :a -e 's/\(&.*\)\.\(.*&\)/\1\2/; ta' file
于 2013-03-04T20:29:23.130 回答