2017-06-29 4 views
1

Ich bin neu im Umgang mit regulärem Ausdruck, aber ich frage mich, ob wir einen Regex für unterzeichnete Bilder haben können. Ich möchte alles nach "A" in den Logs sehen.Erhalte einen Eintrag von der DNS-Erfassung

3 0.238497 x.x.x.x -> x.x.x.x DNS 101 Standard query 0xab5d A servicesx.x.x.x 
    6 0.241131 x.x.x.x -> x.x.x.x DNS 117 Standard query response 0xab5d A x.x.x.x 
    7 0.407185 x.x.x.x -> x.x.x.x DNS 100 Standard query 0x7699 A vipservices-x.x.x.x 
    8 0.409849 x.x.x.x -> x.x.x.x DNS 116 Standard query response 0x7699 A x.x.x.x 
    9 2.905559 x.x.x.x -> x.x.x.x DNS 101 Standard query 0x9c5d A servicesx.x.x.x 
10 2.908308 x.x.x.x -> x.x.x.x DNS 117 Standard query response 0x9c5d A x.x.x.x 
11 3.261304 x.x.x.x -> x.x.x.x DNS 101 Standard query 0x9575 A servicesx.x.x.x 
12 3.263582 x.x.x.x -> x.x.x.x DNS 117 Standard query response 0x9575 A x.x.x.x 
13 4.898380 x.x.x.x -> x.x.x.x DNS 101 Standard query 0x451a A servicesx.x.x.x 
14 4.900842 x.x.x.x -> x.x.x.x DNS 117 Standard query response 0x451a A x.x.x.x 
15 5.406778 x.x.x.x -> x.x.x.x DNS 100 Standard query 0x4f52 A vipservices-x.x.x.x 

Ich möchte so etwas ausgeben.

A servicesx.x.x.x 
A vipservices-x.x.x.x 
A servicesx.x.x.x 

Jede Leitung würde geschätzt werden.

+0

dieses 'grep -o 'A. *'' ?? –

+0

@PS. Bingo. das war es, wonach ich suchte. –

Antwort

0

Um alles von A einschließlich A.

grep -o 'A.*' inputFile 

grep Lösung gefolgt zu drucken.

grep -o 'A.*service.*' inputFile 
A servicesx.x.x.x 
A vipservices-x.x.x.x 
A servicesx.x.x.x 
A servicesx.x.x.x 
A servicesx.x.x.x 
A vipservices-x.x.x.x 

A.*service.*: Mittel A von null oder mehr Zeichen von Service alles gefolgt gefolgt gefolgt.

0
$ awk '{if(match($NF,"service")!=0) print $(NF-1),$NF}' file 
A servicesx.x.x.x 
A vipservices-x.x.x.x 
A servicesx.x.x.x 
A servicesx.x.x.x 
A servicesx.x.x.x 
A vipservices-x.x.x.x 

Wenn das letzte Feld "service" die patterne übereinstimmen, dann drucken $(NF-1) & $NF

+0

Ich denke, Sie könnten auch die Suche von String/String/und Vergleich dieser Zeichenfolge mit $ NF auch hier verwenden. – RavinderSingh13

+0

Danke @CWLiu für die Hilfe. Das hat auch funktioniert. –

+0

Verwenden Sie keinen regexp-Vergleich, wenn ein Zeichenfolgenvergleich erforderlich ist (für Robustheit und Effizienz). Mit einer Zeichenkette anstelle von regexp Vergleichsfunktion wäre Ihr Code "awk" {if (index ($ NF, "service")! = 0) drucken $ (NF-1), $ NF} 'Datei', aber natürlich gibt es keine Punkt Einbettung der Bedingung in der Aktion, so dass Sie es wirklich schreiben würde als 'awk' Index ($ NF, "Service") {print $ (NF-1), $ NF} 'Datei' –

0

Versuch:

awk '$NF ~ /services/{print $(NF-1),$NF}' Input_file 

Überprüfung, ob letzte Feld Leitung in IT-Dienstleistungen String ist, wenn ja, dann wird das Druck vorletztes Feld und letztes Feld dieser Zeile. mit -o Flaggen nur passende Zeichenfolge drucken:

0

Kräftig, portabel, effizient alles von A bedrucken Sie tun würde:

awk '$(NF-1) == "A" { print $(NF-1}, $NF }' file 

sonst eine regexp-Lösung, die zumindest tragbar ist für alle UNIX-Systeme würde:

sed -n '/.*A/A/p' file 
Verwandte Themen