Как получить количество заданной (диапазона) длины из строки с grep?

Здесь у меня есть bash «one-liner»: cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 16 | grep '[0-9]' cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 16 | grep '[0-9]' cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 16 | grep '[0-9]' , которые генерируют 16 строк из 16 символов буквенно-цифровых строк.

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

 nZ3BED8FYGNkYMGc zu83X7pgqLX36q2B mocN9MhYoXzOwKkO Ly2lfakdJXcX3J1s I3Zezk8wkwkX7wKg UZh36waccItxARGN 7qxJSnpKRcPR6Vki fhTW3wd0ftygKxET YQzKUxhBdEQ3O2rY fy2tcApkl5KYOjYe F05WqnwMRGIevzh9 q2c86PsKGlJkjijp h6ig7eXzPhjY75h7 PX0ikEW2z8ptQsAI M5mdMSvQmvmWF5yS GCPqQklXHc8H2Kmv 

Мне нужно получить из этих строк числа указанной (диапазона) длины, например, я хотел бы получить числа из E4wla28wqm3681rX , диапазон длин от 4 до 16. Результат должен быть 3681 .

Я попытался изменить последний grep на такую ​​форму: grep -o '[0-9]{4,16}' , но он ничего не дает, даже без head -n 16 part. С grep '[0-9]*' Я получаю каждое число (не цифра!) E4wla28wqm3681rX строки в отдельных строках, например, от E4wla28wqm3681rX Я получаю:

 4 28 3681 

Такие вещи, как grep -o '[0-9]+' , grep -o '[0-9]{1}' или grep -o '[0-9]{1, }' тоже ничего не дают.

Пожалуйста, может кто-нибудь помочь мне с этой проблемой? Или, по крайней мере, вы могли бы рассказать мне, что случилось с «greps», упомянутым выше?

Извините за любые грамматические ошибки.

2 Solutions collect form web for “Как получить количество заданной (диапазона) длины из строки с grep?”

Чтобы получить знакомые регулярные выражения, вам нужно включить «расширенные регулярные выражения» с флагом «-E». При этом ваше регулярное выражение должно работать:

 ... | grep -E -o '[0-9]{4,16}' 

Флаг -P (Perl-совместимые регулярные выражения), который поддерживает некоторые дистрибутивы, в этом случае не требуется.

Развертывание того, что один лайнер и перестановка немного, плюс несколько настроек, получает:

 cat /dev/urandom | \ tr -dc 'a-zA-Z0-9' | \ fold -w 16 | \ tr -d '[Az]' | \ grep '....' | \ head -n 16 

Выходы:

 7405935 60722 11225 96954 3966 8774 539418 1964 59150 5994 1086 7470 2751 8534 21501 14927 

Примечание: n-значные числа, вероятно, являются случайными, если брать их отдельно, но распределение по цифре не является. Вот пробег 1000000, все цифры изменены на «x», отсортированы, а затем подсчитаны:

  cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | \ tr -d '[Az]' | grep '....' | head -n 1000000 | \ tr '[0-9]' x | sort | uniq -c | nl -v 4 

Выходы:

  4 594210 xxxx 5 275196 xxxxx 6 96871 xxxxxx 7 26838 xxxxxxx 8 5738 xxxxxxxx 9 997 xxxxxxxxx 10 134 xxxxxxxxxx 11 14 xxxxxxxxxxx 12 2 xxxxxxxxxxxx 

Мы можем видеть, что чем больше цифр, тем более маловероятно число. В миллионах чисел только две цифры составляют 12 цифр, а ни одна из них не составляет 13-16 цифр.

  • Grep каталог и возвращаемый список с номерами строк
  • Строки Grep, где изменения происходят в столбцах
  • Grep -line-buffered, могу ли я искать тот же буфер с результатами первого grep?
  • перемещать содержимое поиска в другую папку
  • Shell Script для удаления двойных кавычек в пределах значения столбца
  • Подсчитайте количество строк, найденных grep
  • find / grep выводит две строки для каждого найденного файла
  • Почему этот однострочный лайнер не может произвести вывод?
  • как совместить точный субдомен с grep, игнорируя другие
  • Греп, похоже, не работает должным образом для меня
  • Zero input_file_names в Grep
  • grep выходит из-за использования плунжера - могу ли я заставить grep не использовать столько бара?
  • Interesting Posts

    Как добавить возврат каретки перед каждой новой линией?

    USB-флеш-накопитель с жестко закодированным разделом

    Есть ли способ локализовать переменные для текущей функции в `mksh`, но не для других?

    Какова цель опции -I команды xargs?

    Группа процессов (сеанс) процессов GUI

    «Не удалось подключиться к дисплею»: ошибка 0.0 "на Cygwin

    Несколько избыточности WebServers с одинаковым IP-адресом для общего доступа

    Извлечение IP-адреса из текста и сохранение его в переменной

    Установка опции udisk2 NTFS по умолчанию для съемного диска

    Комплексное связывание RHEL 5

    Может ли пользовательский языковой стандарт жить под ~ /?

    evince открывает новый документ на последней странице

    Как я могу отладить проблему с моим сетевым подключением?

    Установите дополнительную функцию завершения для bash

    Как избежать ненужного удаления и повторного перемещения перемещенных папок при использовании rsync?

    Linux и Unix - лучшая ОС в мире.