Как мне сказать grep после того, как пайп от кошки выделил только цифры больше 720 или, возможно, больше двух цифр?

Это довольно простой вопрос. Если вы хотите добавить дополнительную полезную информацию об использовании grep таким образом, не стесняйтесь.

2 ответа

Предполагая, что под "выделением чисел больше 720" вы подразумеваете, что хотите видеть полный текст, но эти цифры выделены цветом в выводе терминала. Далее я предполагаю, что такие числа также должны быть выделены, если они являются частью слова, или имеют префикс или суффикс с чем-либо нечисловым (включая знаки отрицания или десятичные точки). Однако ведущие нули не будут частью матча.

Тем не менее, вы можете попробовать регулярное выражение ^|[1-9]\d{3,}|[89]\d{2}|7[2-9]\d после включения PCRE-совместимых выражений в grep с -P переключатель. Вот пример выходных данных, чтение из файла example.txt, с выделенными частями жирным шрифтом:

$ grep -P '^|[1-9]\d{3,}|[89]\d{2}|7[2-9]\d' example.txt

something
foo 123 42 1111 777 719 720 1000000
321 -6666 bar999 8383m x1425y 52411.0 00013

Используемое регулярное выражение состоит из нескольких частей, которые соединены вместе с помощью канала (|), что означает, что оно совпадает, если какая-либо из этих частей совпадает:

  • ^ просто совпадает в начале каждой строки, фактически не потребляя никаких символов. Это добавлено также для отображения всех других строк без соответствующих номеров в выводе, но без выделения какой-либо части этих строк.
  • [1-9]\d{3,} соответствует одной цифре в диапазоне 1-9 (без начального нуля), за которой следуют не менее трех или более произвольных цифр (\d эквивалентно [0-9]). Это правило соответствует всем числам, большим или равным 1000.
  • [89]\d{2} соответствует номеру, начинающемуся с 8 или 9, за которыми следуют ровно две произвольные цифры. Это соответствует всем числам от 800 до 999.
  • 7[2-9]\d соответствует числу, начинающемуся с 7, за которым следует одна цифра в диапазоне 2-9 и еще одна произвольная цифра. Это охватывает все числа от 720 до 799.

У меня была аналогичная проблема: проверка строки версии, которая должна быть «Версия 2.32» или новее. Мой grep (встроенный BusyBox) не поддерживает параметр -P или {n}, поэтому использование базового grep:

      grep "Version 2\.3[2-9]\|2\.[4-9][0-9]\|[3-9]\.[0-9][0-9]"
Другие вопросы по тегам