Awk 搜索 - 同一字符串中的组合字符类

Awk 搜索 - 同一字符串中的组合字符类

晚上好,

我试图同时使用多个角色类别但没有成功。给定一个包含 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

如果我正确理解你的问题,你可以使用matchfirst, thenRSTARTRLENGTH来提取匹配的字符串,然后检查它是否存在数字和字符,因此:

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

相关内容