工具awk
的线型匹配类似
/pattern/ { statements; }
有什么方法可以将pattern
的字符串作为变量使用,以便在match
表达式中使用?
甚至更好,直接获得:
(groups)
,则匹配组在{statements}
块内?
答案 0 :(得分:3)
如果您使用GNU awk,而不是在条件部分中使用/pattern/
,请使用match
及其第三个参数match(string, regexp [, array])
,您可以访问匹配的文本,起始索引,长度和小组:
$ echo foobar |
gawk 'match($0, /(fo*)(b.*)/, a) {
print a[0],a[0,"start"],a[0,"length"] # 0 index refers to whole matched text
print a[2],a[2,"start"],a[2,"length"] # 1, 2, etc. to matched groups
}'
foobar 1 6
bar 4 3
有关更多信息,请参见GNU awk documentation for match
。
答案 1 :(得分:1)
请尝试以下方法。
第一:获得匹配的文本match
是最佳选择。
awk 'match($0,/regex/){print substr($0,RSTART,RLENGTH)}' Input_file
2nd:获取匹配字符串的长度:
awk 'match($0,/regex/){print RLENGTH}' Input_file
3rd:要获取所有匹配的模式,请使用带有匹配项的while
循环,直到找到匹配项为止,我们应该获取所有匹配的模式。