Поиск точного числа с помощью grep

Вы должны иметь /dev/vboxdrv принадлежавший группе "vboxuser" и пользователю, начинающему контейнер в той группе. Добавьте, что пользователь группе затем удостоверяется, что существуют полномочия группы (т.е. chmod 660 /dev/vboxdrv).

5
27.09.2015, 18:09
3 ответа
grep -E '^[^0-9]*1234([^0-9]+1234)*[^0-9]*$' file.txt

Объяснение

  • ^[^0-9]*1234: найти первое совпадение 1234, которому могут предшествовать нецифровые символы.
  • ([^0-9]+1234)*: могут быть дальнейшие итерации 1234, но они должны быть отделены от первых 1234 (и других 1234) нецифровыми символами (поэтому используйте +).
  • [^0-9]*$: соответствует всей строке (с $). После финала 1234 могут быть нецифровые символы (но не обязательно, следовательно *).

EDIT

Если 1234 должны быть разделены пробелами (или находиться в начале или в конце строки), то используйте

grep -E '^([^0-9]* )?1234(( [^0-9]*)? 1234)*( [^0-9]*)?$'

Explanation

  • ^([^0-9]* )?: в начале могут быть нецифровые символы, если они заканчиваются пробелом.
  • 1234: найти первое (необходимое) совпадение 1234.
  • (( [^0-9]*)? 1234)*: Я проработаю скобки в обратном порядке. Могут быть (ноль или больше) дополнительные копии 1234, но им должен предшествовать пробел, т.е. 1234. Перед этим пробелом могут стоять нецифровые символы, что нормально, если они отделены от предыдущей копии 1243 другим пробелом, т.е. ( [^0-9]*)?.
  • ( [^0-9]*)?$: в конце могут быть нецифровые символы, если им предшествует пробел.
4
27.01.2020, 20:33

awk может быть удобнее, чем grep при этом. Установите разделитель полей на прогоны нецифровых символов, затем перебирайте поля и выводите строку только в том случае, если каждое непустое поле в точности равно 1234

awk -F'[^[:digit:]]+' '{
  for(i=1; i<=NF; ++i) 
  if (($i) && ($i != 1234)) next
  }; {print}' file.txt
5
27.01.2020, 20:33

Найдите число либо в начале строки ( ^ ), либо которому предшествует нецифровое число ( [^ 0-9] ), а также в конце ( $ или [^ 0-9] ).

grep -E '(^|[^0-9])1234($|[^0-9])' file.txt

Если вы хотите разрешить нули в начале, добавьте 0 * перед числом.

grep -E '(^|[^0-9])0*1234($|[^0-9])' file.txt

Если вы также хотите отклонить строки, содержащие любую последовательность из одной или нескольких цифр, которая не является частью вхождения этого конкретного числа, то вы ищете строки, состоящие из последовательностей, чередующихся с одной или несколькими нецифровыми цифрами и этим конкретным числом. , что в основном равно ([^ 0-9] +1234) * . Строка может начинаться и заканчиваться как числом, так и нецифровым, тогда как внутренние последовательности нецифров могут быть не пустыми. Кроме того, строка должна содержать номер хотя бы один раз. Собираем все вместе:

grep -xE '[^0-9]*1234([^0-9]+1234)*[^0-9]*' file.txt
3
27.01.2020, 20:33

Теги

Похожие вопросы