Почему в этом регулярном выражении отсутствуют кавычки? - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь использовать sed для увеличения номера версии в файле conf. Номер версии имеет такую ​​форму: MENDER_ARTIFACT_NAME = "release-6".

Используя следующее:

sed -r 's/(.*)(release\-)([0-9]*)(.*)/echo "\1\2$((\3+1))\4"/ge'

Результат таков: MENDER_ARTIFACT_NAME = release-7

т.е. это работает, но это пропускает кавычки. Я проверил документы по регулярным выражениям, и (. *) Должен совпадать со всеми не символами новой строки, любое количество раз, поэтому первое должно соответствовать всему, включая кавычку, до release-6, а второе должно соответствовать всем, включая цитата, после release-6. Вместо этого, кажется, полностью отказаться от кавычек. Что я делаю не так?

1 Ответ

0 голосов
/ 11 ноября 2018

Согласно документации :

флаг e выполняет результат подстановки как команду оболочки ...

, что означает кавычки для отображения группы символов. Я пытаюсь echo MENDER_ARTIFACT_NAME = "release-6". Вы должны добавить экранированные кавычки в операторе echo вручную:

sed -r 's/^(.*)(release\-)([0-9]+)/echo "\1\\"\2$((\3+1))\\""/ge'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...