Заменить фразу в файле строкой, содержащей специальные символы - PullRequest
0 голосов
/ 16 февраля 2012

Я использую sed -e "s/foo/$bar/" -e "s/some/$text/" file.whatever для замены фразы в определенном файле.Проблема в том, что строка $ bar содержит несколько специальных символов, таких как /.Поэтому, когда я пытаюсь заменить что-то в текстовом файле, используя следующий код ...

#!/bin/bash

bar="http://stackoverflow.com/"

sed -e "s/foo/$bar/" -e "s/some/$text/ file.whatever

..., тогда я получаю сообщение об ошибке: sed: unknown option to s Могу ли я что-нибудь с этим сделать?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Вы можете использовать любой разделитель.s@some@SOME@ например.Еще один хороший разделитель - вертикальная черта.Другие символы могут работать, но имеют особое значение для некоторых контекстов, таких как регулярные выражения.

0 голосов
/ 17 февраля 2012

Вы можете получить эту сложность в sed независимо от того, какие разделители вы используете, особенно если вы не знаете, что содержит строка.Я бы выбрал другой метод для передачи переменных оболочки в вспомогательный интерпретатор.

awk -v rep1="$bar" -v rep2="$text" '{sub(/foo/, rep1); sub(/some/, rep2); print}'

или

perl -spe 's/foo/$rep1/; s/some/$rep2/' -- -rep1="$bar" -rep2="$text"

Корректность в данном случае важнее краткости.
(ссылка на пример Perl )

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