使用sed和regex删除前缀

时间:2012-03-10 02:15:31

标签: regex sed

我正在尝试使用 sed (1)删除所有std::memsetstd::memcpy ::memset::memcpy。我尝试了以下模式,但它不起作用 - 我只是得到相同的文本。

$ sed 's/std\(::\(memset|memcpy\)\)/${\1}/g'

基本上我想摆脱标准,如果跟着::memset::memcpy

2 个答案:

答案 0 :(得分:6)

在脚本中使用扩展正则表达式,为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

答案 1 :(得分:2)

OS X的sed是一只好奇的野兽!

这有效:

bash-3.2$ echo '
std::memset()
std::memcpy()
' | sed -E 's/std(::(memset|memcpy))/\1/g' 

::memset()
::memcpy()

(经过Darwin内核版本11.3.0:2012年1月12日星期四18:47:41测试; root:xnu-1699.24.23~1 / RELEASE_X86_64)