Как получить количество заданной (диапазона) длины из строки с 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», упомянутым выше?

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

  • bash find xargs grep только одно событие
  • Как сделать pgrep первым аргументом командной строки?
  • Как изменить сортировку результата из grep -rc
  • Как сопоставить несколько строк, начинающихся с TAB, и строку до 1-го в группе?
  • Как использовать команду grep для поиска всех URL-адресов в файле базы данных, кроме гиперссылок и http://www.example.com, и сохранить их в другом файле
  • grep и скобки в тексте
  • Как использовать multiline как group-separator в grep?
  • добавьте «#» в начале выбранных строк в файле
  • 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 цифр.

    Interesting Posts

    Невозможно выполнить печать из fluxbox, если я не впервые вхожу в систему с другим WM

    Когда Samba работал в manjoro linux, демону не удалось запустить: Samba обнаружила неправильно сконфигурированную «роль сервера» и вышла.

    Почему Perl установлен по умолчанию в большинстве дистрибутивов Linux?

    Как установить LibreOffice в Scientific Linux 6.1?

    Версия библиотеки, версия API и soname: как их назвать?

    Где живут звуковые драйверы?

    Монтирование процесса доступно только для чтения

    find * ищет файл с именем «*» на Debian, но не на RHEL

    Ограничить исходящую пропускную способность на определенном интерфейсе

    Принудительное воспроизведение звука с высоким качеством

    Solaris – Наследование файлами права собственности пользователя на каталог

    Продолжайте получать тот же результат после "export PATH"

    Как отключить предупреждение «Program» / bin / bash «crashed» при убийстве оболочки?

    Что такое -u diff действительно делает?

    Веб-камера Centos, быстрое приложение для моментального снимка?

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