![Awk 搜索 - 同一字符串中的组合字符类](https://linux22.com/image/88278/Awk%20%E6%90%9C%E7%B4%A2%20-%20%E5%90%8C%E4%B8%80%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E7%BB%84%E5%90%88%E5%AD%97%E7%AC%A6%E7%B1%BB.png)
晚上好,
我试图同时使用多个角色类别但没有成功。给定一个包含 HTTP 流量 URI 的列,我希望 REGEX 能够识别 URI 字段包含长度为 6-10 个字符的文本字符串(其中包含数字)的行和小写字母...每个至少一个,但不是大写字母。
此搜索不会局限于特定字符或字符串的一部分...
测试字符串:
aasd4567
9f7g6s5df
0hjksdf73
123456789
12345/1234a
Wordswords
W0rdsW4rds
aasd4/567af
9f7g6s5dfasdf
0hjks/asdf
12345/1234asd
Wordswords12
W0rdsW4rds12312312
我希望我可以使用一些带括号的布尔值,即:
awk --re-interval '$1 ~ /([0-9]+&[a-z]+){6,10}/'
但这是行不通的。显然,将它们结合起来也行不通,因为
awk --re-interval '$1 ~ /[a-z0-9]{6,10}/'
仍然返回不带任何数字和任何小写字母的字符串。
我什至试图找到结合 [[:lower:]] 和 [[:digit:]] 的方法,但遇到了与上面第一个示例相同的问题。
我确信这是一个超级简单的修复,我错过了什么?我不反对使用 gawk/grep/sed/etc,无论是完成此任务最有效的工具。
谢谢
答案1
如果我正确理解你的问题,你可以使用match
first, thenRSTART
和RLENGTH
来提取匹配的字符串,然后检查它是否存在数字和字符,因此:
awk --re-interval '{match($1, /[[:lower:][:digit:]]{6,10}/);
x=substr($1, RSTART, RLENGTH)}; x ~ /[[:lower:]]/ && x ~ /[[:digit:]]/' test_strings
给定您的测试字符串,这会产生:
aasd4567
9f7g6s5df
0hjksdf73
9f7g6s5dfasdf
12345/1234asd
Wordswords12
W0rdsW4rds12312312