Удаление префикса с помощью sed и regex - PullRequest
2 голосов
/ 10 марта 2012

Я пытаюсь использовать sed (1), чтобы удалить все вхождения std::memset и std::memcpy с ::memset и ::memcpy.Я попробовал следующий шаблон, но он не работает - я просто получаю тот же текст обратно.

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

В основном я хочу избавиться от std, если за ним следует ::memset или ::memcpy.

Ответы [ 2 ]

6 голосов
/ 10 марта 2012

Используйте расширенные регулярные выражения в сценарии, указав параметр командной строки -r для GNU sed или -E для систем BSD, таких как Mac OS.

linux$ sed -r 's/std(::(memset|memcpy))/\1/g' code.cpp

macos$ sed -E 's/std(::(memset|memcpy))/\1/g' code.cpp
2 голосов
/ 10 марта 2012

OS X's sed - любопытный зверь!

Это работает:

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

::memset()
::memcpy()

(протестировано на ядре Darwin версии 11.3.0: четверг, 12 января 18:47:41 PST 2012; корень: xnu-1699.24.23 ~ 1 / RELEASE_X86_64)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...