сед со специальными символами - PullRequest
6 голосов
/ 12 мая 2011

У меня есть строка, на которой я хочу использовать sed:

--> ASD = $start ( *.cpp ) <--

где $ start не является переменным, я хочу использовать sed и заменить всю эту строку на:

ASD = $dsadad ( .cpp ) 

Как я могу заставить sed игнорировать специальные символы, я пытался добавить обратную косую черту перед специальными символами, но, возможно, я ошибся, может кто-нибудь показать мне пример?

Вот что я хочу:

sed 's/CPPS = \$(shell ls | grep \*\.cpp )/somereplace/' Makefile

Ответы [ 3 ]

4 голосов
/ 12 мая 2011
sed 's/\$start/\$dsadad/g' your_file
>> ASD = $dsadad ( *.cpp ) 

sed 's/\*//g' your_file
>> ASD = $start ( .cpp ) 

Чтобы выполнить редактирование:

sed -i 's/ASD = \$start ( \*.cpp )/ASD = \$dsadad ( .cpp )/' somefile
>> ASD = $dsadad ( .cpp )

Добавьте -i (--inplace) для редактирования входного файла.

3 голосов
/ 12 мая 2011

Обратная косая черта работает отлично. echo '*.cpp' | sed 's/\*//' => .cpp

Если вы находитесь в оболочке, вам может потребоваться двойной escape $, поскольку это специальный символ как для оболочки (расширение переменной), так и для sed (конец строки)

echo '$.cpp' | sed "s/\\$//" или echo '$.cpp' | sed 's/\$//' => '.cpp'

Не бежать ( или ); это фактически сделает их особенными (группами) в седе. Некоторые другие общие символы включают [ ] \ . ?

Вот как избежать вашего примера:

sed 's/ASD = \$start ( \*\.cpp )/ASD = $dsadad ( .cpp )/' somefile
1 голос
/ 12 мая 2011

Главы $, *, . специально для регулярных выражений, поэтому их нужно экранировать, чтобы воспринимать буквально.

sed 's/ASD = \$start ( \*\.cpp )/ASD = \$dsadad ( .cpp )/' somefile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...