ここにbash "one-liner"があります。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
grep '[0-9]*'
E4wla28wqm3681rX
4
28
3681
grep -o '[0-9]+'
のようなものgrep -o '[0-9]{1}'
や何も提供されていませんgrep -o '[0-9]{1, }'
。
誰でもこの問題を解決するのに役立ちますか?それとも、少なくとも上記の「greps」にどのような問題があるのか教えてください。
文法エラーについてお詫び申し上げます。
ベストアンサー1
使い慣れた正規表現が正しく機能するには、「-E」フラグを使用して「拡張正規表現」を有効にする必要があります。これにより正規表現が機能します。
... | grep -E -o '[0-9]{4,16}'
この場合、一部のディストリビューションでサポートされているフラグ-P
(Perl互換正規表現)は必要ありません。