как игнорировать специальные символы в файле при выполнении sed - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно заменить строку содержимым файла json.Поэтому мой код выглядит так:

value=$(<minified.json)
sed -i -e "s/<!--MyJson-->/$value/" file.html

Мне нужно заменить содержимое файла json на <!--MyJson--> строку в file.html.

Проблема возникает из-за того, что некоторые элементы массива в json имеют / поэтому из-за этого происходит сбой с ошибкой

sed: -e expression #1, char 438: unknown option to `s'

Но я не могу изменить этот текст в json.Итак, как я могу сделать мою команду sed, чтобы игнорировать обратную косую черту в тексте копии.Или как я могу сделать это как слепую замену.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете использовать различные разделители в подстановке:

sed -i -e "s%<!--MyJson-->%$value%" file.html

(при условии, что % не используется в json).

Или переключитесь на Perl, где переменные являются гражданами первого класса, а не просто расширение макросов, как в оболочке:

value=$value perl -i~ -pe 's/<!--MyJson-->/$ENV{value}/' -- file.html
  • -p читает строку ввода построчно и печатает ее после обработки
  • хеш ENV содержит переменные среды, установкапеременная в той же строке экспортирует ее в следующую команду
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...