2012-03-10 4 views
2

내가 (1) ::memset::memcpy으로 std::memsetstd::memcpy의 모든 항목을 제거하기 위해 sed를 사용하기 위해 노력하고있어 사용하여 접두어를 제거. 다음 패턴을 시도했지만 작동하지 않습니다. 동일한 텍스트를 다시 얻습니다.SED 및 정규식

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

는 기본적으로 나는 ::memset 또는 ::memcpy 다음 경우 표준 제거하고자합니다.

답변

6

Mac OS와 같은 BSD 시스템 용 GNU sed 또는 -E에 명령 줄 옵션 -r을 제공하여 스크립트의 확장 정규 표현식을 사용하십시오.

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을 가지고 있지 않습니다 ... 저는 또한 휴대용 솔루션을 찾고 있습니다. –

+0

'sed 's/std \ (:: memset \ | :: memcpy \)/\ 1/g'' – kev

+0

을 시도해보십시오. –

2

OS X의 sed은 궁금한 동물입니다!

이 작동 :

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

::memset() 
::memcpy() 

(: 목 1월 12일 태평양 표준시 18시 47분 41초 2012; 루트 : 11.3.0 다윈 커널 버전에서 테스트 XNU - 1699.24.23 ~ 1/RELEASE_X86_64)

+0

내 시스템은 정상적으로 보입니다. 모든 시스템이 BSD를 실행합니다. – tchrist

+0

저는 GNU ☻에 더 익숙합니다. – Johnsyweb