使用awk线匹配模式

时间:2019-01-14 02:11:28

标签: awk

工具awk的线型匹配类似

/pattern/ { statements; }

有什么方法可以将pattern的字符串作为变量使用,以便在match表达式中使用?

甚至更好,直接获得:

  • 图案匹配的文字
  • 模式匹配长度
  • 如果模式中有(groups),则匹配组

{statements}块内?

2 个答案:

答案 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循环,直到找到匹配项为止,我们应该获取所有匹配的模式。