sed - соответствие всей строки после амперсанда - PullRequest
0 голосов
/ 04 октября 2019

У меня проблемы с получением sed для сопоставления (и замены) целой строки, содержащей амперсанды. Кажется, он совпадает до первого амперсанда, а затем прекращает сопоставление. И строка замены заменяет только эту часть, а не всю строку.

sed -i 's/^error_reporting = .*/error_reporting = E_ALL \& \~E_DEPRECATED \& \~E_STRICT \& \~E_NOTICE/' /etc/php.ini

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

ОБНОВЛЕНИЕ : Я понял проблему. Я вызывал команду sed из сценария javascript, и он экранировал символы, прежде чем передать ее команде sed. Двойное экранирование строки решило проблему.

1 Ответ

1 голос
/ 04 октября 2019

Также не может воспроизводиться с GNU sed или BSD sed по умолчанию на MacOS:

$ echo 'error_reporting = a & ~b & c' | gsed 's/^error_reporting = .*/error_reporting = E_ALL \& \~E_DEPRECATED \& \~E_STRICT \& \~E_NOTICE/'
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...