переменная в регулярном выражении awk - PullRequest
2 голосов
/ 02 ноября 2010

Как передать переменную в регулярное выражение, как это?

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

Ответы [ 2 ]

1 голос
/ 02 ноября 2010

Я не уверен, что вы пытаетесь сопоставить, но если это что-то вроде:

       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
-

Работает в идеоне здесь

0 голосов
/ 20 мая 2011

Если вы хотите передать переменную оболочки в awk, используйте опцию -v, например:

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