Variable in AWK regulären Ausdruck
Frage
Wie eine Variable für reguläre Ausdrücke wie diese passiert?
match($0, /([^ ]+) (GET|POST|PUT|DELETE) ([^?]+)[^ ]+ HTTP\/[^ ]+ \"(VAR)\" ([^ ]+) ([^ ]+) ([^ ]+)/, matches)
Lösung
Ich bin nicht sicher, was Sie versuchen, passen, aber wenn es etwas entlang der Linien von:
GETxxxHTTPxxx"VAR"xxx
Ich denke, dass Sie auf diese Weise gehen kann:
{
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"-"
}
}
, die mit dem Eingang oben, die folgende Ausgabe erzeugt:
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
-
Beim Laufen bei ideone hier
Andere Tipps
Wenn Sie eine Shell-Variable in awk übergeben möchten, verwenden Sie die Option -v, wie folgt aus:
awk -v VAR=${ShellVAR} '{
//you awk program...
}'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow