Ваше текущее регулярное выражение '[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)