我有很长的条目列表记录在一个文件中,类似于这个简短的列表:
FFF1B976-9DDE-11E7-9C3D-6241D7D553BE
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
6846DFEC-C0A2-11E8-B7A8-3ECB9C0CC049
6846DFEC-C0A2-11E8-B7A8-3ECB9C0CC049
--[SNIP]--
Run Code Online (Sandbox Code Playgroud)
我想根据0123456789
每个条目中的位数( set 中的字符)过滤此列表,如果位数超过特定阈值,则保留字符串,否则将其删除。在前面的示例中,如何保留名称中包含 18 位数字的所有条目?
预期输出:
FFF1B976-9DDE-11E7-9C3D-6241D7D553BE
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
Run Code Online (Sandbox Code Playgroud)
与awk
:
awk -F '[[:digit:]]' 'NF > 18'
Run Code Online (Sandbox Code Playgroud)
我们使用数字作为字段分隔符,因此字段数将是数字数加一(x1y
被拆分为x
和y
),因此上面我们正在寻找至少有18 位数字的行。
(使用mawk
, 替换[:digit:]
为0-9
.mawk
不支持 POSIX 字符类,但它[0-9]
与其他awk
实现相反,仅在不考虑语言环境的情况下匹配 0123456789。便携,您可以使用[0123456789]
,或者[0-9]
如果您知道文本不包含非- ASCII 数据)。
对于 正好有18 位数字的行,这将是:
awk -F '[[:digit:]]' 'NF == 19'
Run Code Online (Sandbox Code Playgroud)
用sed
, 表示至少 18 位数字:
sed -e 's/[[:digit:]]/&/18;t' -e d
Run Code Online (Sandbox Code Playgroud)
与grep
:
grep -E '(.*[[:digit:]]){18}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1784 次 |
最近记录: |