使用sed和regex删除前缀
我正在尝试使用sed(1)删除所有出现的使用sed和regex删除前缀,regex,sed,Regex,Sed,我正在尝试使用sed(1)删除所有出现的std::memset和std::memcpy以及:memset和:memcpy。我尝试了以下模式,但它不起作用-我只是得到相同的文本返回 $ sed 's/std\(::\(memset|memcpy\)\)/${\1}/g' 基本上,我想去掉std,如果后面跟着::memset或::memcpy在脚本中使用扩展正则表达式,方法是为GNU-sed系统提供命令行选项-r,或为Mac OS等BSD系统提供-E linux$ sed -r 's/std(::
std::memset
和std::memcpy
以及:memset
和:memcpy
。我尝试了以下模式,但它不起作用-我只是得到相同的文本返回
$ sed 's/std\(::\(memset|memcpy\)\)/${\1}/g'
基本上,我想去掉std,如果后面跟着
::memset
或::memcpy
在脚本中使用扩展正则表达式,方法是为GNU-sed系统提供命令行选项-r
,或为Mac OS等BSD系统提供-E
linux$ sed -r 's/std(::(memset|memcpy))/\1/g' code.cpp
macos$ sed -E 's/std(::(memset|memcpy))/\1/g' code.cpp
OSX的
sed
是一只好奇的野兽
这项工作:
bash-3.2$ echo '
std::memset()
std::memcpy()
' | sed -E 's/std(::(memset|memcpy))/\1/g'
::memset()
::memcpy()
(在达尔文内核版本11.3.0:Thu Jan 12 18:47:41 PST 2012上测试;root:xnu-1699.24.23~1/RELEASE_X86_64)第一个不起作用,我的
sed
(OS X)没有-r。。。我也在寻找一个可移植的解决方案。请尝试sed's/std\(::memset\::memcpy\)/\1/g'
只删除反斜杠(\)
在条(|)之前(
)。好的,你在技术上正确使用了-r,它只是BSD上的-E。有趣的是,FreeBSD具有-r的兼容性,但OS X没有:(对我来说似乎很正常。我所有的系统都运行BSD。