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
使用sed和regex删除前缀_Regex_Sed - Fatal编程技术网

使用sed和regex删除前缀

使用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(::

我正在尝试使用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(::(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。