САС не обновляется со сложным регулярным выражением - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь автоматизировать обновление номера версии в файле как часть процесса сборки. Я могу заставить работать следующее, но только для номеров версий с одинарными цифрами в каждой из основных / второстепенных / фиксированных позиций.

sed -i 's/version="[0-9]\.[0-9]\.[0-9]"/version="2.4.567"/g' projectConfig.xml

Я пробовал более сложное регулярное выражение и он работает в MS Regular Xpression Tool, но не будет соответствовать при запуске sed.

sed -i 's/version="\b\d{1,3}\.\d{1,3}\.\d{1,3}\b"/version="2.4.567"/g' projectConfig.xml

Пример ввода:

This is a file at version="2.1.245" and it consists of much more text.

Желаемый вывод

This is a file at version="2.4.567" and it consists of much more text.

Я чувствую, что мне чего-то не хватает.

1 Ответ

1 голос
/ 15 января 2020

Есть 3 проблемы:

Чтобы включить квантификаторы ({}) в sed, вам нужен переключатель -E / --regexp-extended (или используйте \{\}, см. http://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html#Regular -Expressions )

Сокращение набора символов \d равно [[:digit:]] в sed.

Ваш ввод не заключает в кавычки версию в ".

sed 's/version=\b[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\b/version="2.4.567"/g' \
    <<< "This is a file at version=2.1.245 and it consists of much more text."

Чтобы оставаться более портативным, вы можете использовать переключатель --posix (который требует удаления \b):

sed --posix 's/version=[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}/version="2.4.567"/g' \
   <<< "This is a file at version=2.1.245 and it consists of much more text."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...