2012-03-10 181 views
2

我試圖使用 sed的(1)取的std::memsetstd::memcpy所有出現的::memset::memcpy前綴。我嘗試了以下模式,但它不起作用 - 我只是得到相同的文本。刪除使用sed和正則表達式

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

基本上我想如果後面::memset::memcpy擺脫性病。

回答

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 
+0

第一個不起作用,我的'sed'(OS X)沒有-r ...我也在尋找一個便攜式解決方案。 – 2012-03-10 02:31:52

+0

請嘗試'sed's/std \(:: memset \ | :: memcpy \)/ \ 1/g'' – kev 2012-03-10 02:35:18

+0

也不起作用。 – 2012-03-10 02:36:36

2

OS X的sed是一隻好奇的野獸!

這工作:

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

::memset() 
::memcpy() 

(測試達爾文內核版本11.3.0:星期四一月12 18點47分41秒PST 2012;根:XNU-1699.24.23〜1/RELEASE_X86_64)

+0

似乎對我來說很普通我所有的系統都運行BSD – tchrist 2012-03-10 04:15:25

+0

我更習慣於GNU☻ – Johnsyweb 2012-03-10 04:59:34