2016-03-27 8 views
0

Ich habe eine Reihe von Dateien, die Komma getrennte Felder haben und ich bin auf Redhat Linux. Ich bin die Ausführung der folgenden awk Befehl wie folgt aus:Intervall regulärer Ausdruck in awk funktioniert nicht wie erwartet

awk --re-interval -F "," '$4~/xyz:8080\/proxyval\/getPages.do\?fd=1d[0-9]{1}/ { print }' * 

204:1,204,null,xyz:8080/proxyval/getPages.do?fd=1d7d7 ----> dont expect to see this 
204:1,204,null,xyz:8080/proxyval/getPages.do?fd=1d8 
204:1,204,null,xyz:8080/proxyval/getPages.do?fd=1d8d8 ----> dont expect to see this 
204:1,204,null,xyz:8080/proxyval/getPages.do?fd=1d3 

Der fd=1d[0-9]{1} Teil regxp sollte nur fd=1d8fd=1d3 passen, aber es scheint auch fd=1d7d7 und ‚fd = 1d8d8‘ übereinstimmen. Bitte lass es mich wissen, wenn ich hier etwas verpasse.

Vielen Dank im Voraus Grüße

+0

Wenn Sie das '--re-interval' Flag benötigen, um RE Intervalle zu aktivieren, dann benutzen Sie eine extrem alte Version von gawk, erhalten Sie eine neue. Außerdem ist '{print}' die Standardaktion bei einer echten Bedingung, Sie müssen sie nicht explizit schreiben. –

Antwort

1

Regexp Teil Spiele finden, nicht ganze Strings; Um eine exakte Übereinstimmung zu finden, müssen Sie den Anfang (^) und das Ende ($) des Strings verankern. [0-9]{1} entspricht [0-9] (ein Zeichen von 0 bis 9).

I.e. fd=1d[0-9]{1} findet blahfd=1d8732, wobei der übereinstimmende Bereich fd=1d8 ist; ^fd=1d[0-9]$ wird nicht übereinstimmen, aber entspricht fd=1d8.

+0

Danke Amadan, das hat funktioniert! – Kishore