Bash grep регулярное выражение - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующая строка, которая извлекается из моего файла __version__ = '10.11.12'

Версия также может быть в формате 0.1.2 или даже 100.20.30

У меня есть следующеекоманда bash, но моя текущая проблема в том, что я получаю только одно значение в каждом номере MODULE_VERSION=$(cat <%= project %>/__init__.py | grep -o '[0-9].[0-9].[0-9]')

Я хотел бы изменить регулярное выражение grep, чтобы получить все числовые значения версии.

1 Ответ

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

Ваше текущее регулярное выражение '[0-9]. [0-9]. [0-9]' будет иметь ложные срабатывания и ложные отрицания."."символ зарезервирован для обозначения любого символа, поэтому вы должны экранировать его, используя обратную косую черту, чтобы он соответствовал только символу '.'Кроме того, «[0-9]» будет соответствовать только одному вхождению цифры.Ваше регулярное выражение будет соответствовать любым 5 символам, которые имеют цифры в позициях 1, 3 и 5.

Пример ложного срабатывания:
1a2b3

Пример ложного отрицания:
100.20.30

С помощью grep вы можете подсчитывать вхождения персонажа.Смотрите страницу руководства grep для получения дополнительной информации.Если вы пытаетесь сопоставить приведенные вами примеры (XX.XX.XX | XXX | XXX.XX.XX) Следующее регулярное выражение будет соответствовать всем экземплярам и только экземплярам, ​​следующим этому шаблону.Недостатком является то, что он очень длинный (возможно, есть лучший способ написать это, отредактируйте, если вы его знаете).

grep -o -E '([0-9]{3}\.[0-9]{2}\.[0-9]{2})|([0-9]\.[0-9]\.[0-9])|([0-9]{2}\.[0-9]{2}\.[0-9]{2})' 

Если вы меньше беспокоитесь о ложных срабатываниях, вы можете упростить это до:

grep -E -o '[0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,2}'

Это будет соответствовать некоторым случаям, которые вы не указали.

Примеры ложных срабатываний
1.12.12
123.1.1
12.1.12
список можно продолжить ...

Как было сказано в комментариях, GNU grep будет соответствовать всем вхождениям.(Я проверял эти регулярные выражения с помощью GNU grep 2.20)

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