awk正则表达式中的变量

时间:2010-11-02 12:01:18

标签: linux awk gawk

如何将变量传递给这样的正则表达式?

match($0, /([^ ]+) (GET|POST|PUT|DELETE) ([^?]+)[^ ]+ HTTP\/[^ ]+ \"(VAR)\" ([^ ]+) ([^ ]+) ([^ ]+)/, matches)

2 个答案:

答案 0 :(得分:1)

我不确定你想要匹配什么,但如果它符合以下内容:

       GETxxxHTTPxxx"VAR"xxx

我认为你可以这样:

{
 var1="(VAR)"
 var="(GET|POST|PUT|DELETE)[x]+(HTTP)[x]+\"" var1 "\"[x]+"
 match($0,var,dd);
 for (x in dd){
    print x,"-->",dd[x]
    print"-"
 }
}

使用上面的输入,产生以下输出:

0start --> 1
-
0length --> 21
-
3start --> 15
-
1start --> 1
-
2start --> 7
-
0 --> GETxxxHTTPxxx"VAR"xxx
    -
1 --> GET
-
2 --> HTTP
-
3length --> 3
-
3 --> VAR
-
2length --> 4
-
1length --> 3
-

在ideone here

运行

答案 1 :(得分:0)

如果要将shell变量传递给awk,请使用-v选项,如下所示:

awk -v VAR=${ShellVAR} '{
    //you awk program...
}'