Как получить количество заданной (диапазона) длины из строки с 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 символов буквенно-цифровых строк.

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

  • Как я могу предотвратить появление «grep» в результатах ps?
  • Как фильтровать контент между определенными ключевыми словами с помощью grep?
  • PID PID некоторых процессов UNIX в ls -l
  • подсчитывать строки, соответствующие строке в каждом подкаталоге, и их подкаталоги
  • Ошибка команды grep
  • Как использовать регулярное выражение для соответствия шаблону, который не имеет определенной строки в конце
  •  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», упомянутым выше?

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

  • Измените / etc / xdg / lxsession / LXDE / автозапуск перед загрузкой
  • Является ли вывод grep-файла grep зависимым от порядка шаблонов в файле-шаблоне?
  • Есть ли способ показать только несанкционированные строки в текстовом файле / скрипте?
  • Найти совпадения на смежных линиях
  • grep путается именами файлов с тире
  • Использование 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 цифр.

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