2017-06-29 99 views
1

我是新來玩正則表達式,但想知道我們是否可以有任何正則表達式來捕獲下面的數據。我想在下面的日誌中看到「A」後的所有內容。從DNS捕獲獲得記錄

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 

我想輸出這樣的東西。

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

任何鉛將不勝感激。

+0

這'grep -o'A。*''?? –

+0

@PS。答對了。那是我以後的事情。 –

回答

0

要打印的一切隨之而來的是,包括A.

grep -o 'A.*' inputFile 

grep解決方案:使用-o標誌只打印匹配的字符串。

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.*:裝置A後面的零個或多個字符,接着服務隨後的一切。

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 

如果最後一個字段匹配patterne "service",然後打印$(NF-1) & $NF

+0

我想你也可以在這裏使用字符串/字符串/和字符串與$ NF的比較搜索。 – RavinderSingh13

+0

感謝@CWLiu的幫助。這也起到了作用。 –

+0

當需要字符串比較時不要使用正則表達式比較(爲了健壯性和效率)。使用字符串而不是正則表達式比較函數,你的代碼將是'awk'{if(index($ NF,「service」)!= 0)print $(NF-1),$ NF}'file',但當然沒有將條件嵌入到動作中,這樣你就可以將它寫成'awk'索引($ NF,「service」){print $(NF-1),$ NF}'file' –

0

嘗試:

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

檢查,如果行的最後一個領域是它具有服務的字符串,如果是,則打印該行的第二個最後一個字段和最後一個字段。

0

魯棒,便攜,高效打印一切從A你會怎麼做:

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

否則正則表達式的解決方案,至少是移植到所有的UNIX系統將是:

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