我正在尝试使用 sed (1)删除所有std::memset
和std::memcpy
::memset
和::memcpy
。我尝试了以下模式,但它不起作用 - 我只是得到相同的文本。
$ sed 's/std\(::\(memset|memcpy\)\)/${\1}/g'
基本上我想摆脱标准,如果跟着::memset
或::memcpy
。
答案 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)