Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex sed删除'';仅在字符串的一部分_Regex_Replace_Sed - Fatal编程技术网

Regex sed删除'';仅在字符串的一部分

Regex sed删除'';仅在字符串的一部分,regex,replace,sed,Regex,Replace,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.any

我可能缺少一些基本的东西。我想删除以下字符串中与之间的所有“.”。我应该在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
可以有任意数量的带有&’的“.”,我不希望修改&’之外的“.”

谢谢您的帮助。

试试这个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
试试这一行:

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

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


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


这正是我需要的。我最好用awk来做这个。谢谢。@SkypeMeSM我添加了一个sed(gnu sed)解决方案,您可以选择一个您喜欢的解决方案。虽然您接受了我的答案,但我要指出的是,我的答案中的两个解决方案只有在字符串只有一部分时才有效。如果您的真实文本有更多的
&…&
部分,则需要更改脚本。这正是我所需要的。我最好用awk来做这个。谢谢。@SkypeMeSM我添加了一个sed(gnu sed)解决方案,您可以选择一个您喜欢的解决方案。虽然您接受了我的答案,但我要指出的是,我的答案中的两个解决方案只有在字符串只有一部分时才有效。如果您的真实文本包含更多的
&…&
部分,则需要更改脚本。