在这里,我有一个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”出了什么问题吗?
抱歉,没有任何语法错误。
为了使您熟悉的正则表达式工作,您需要启用带有“ -E”标志的“扩展正则表达式”。这样,您的正则表达式应该可以工作:
... | grep -E -o '[0-9]{4,16}'
在-P
某些情况下,不需要某些发行版支持的标志(与Perl兼容的正则表达式)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句