2016-01-12 113 views
0

我想通過剛纔解析greppable文件輸出到grep從nmap的掃描輸出:Grepping端口22

cat $file | grep "22/open" | awk '{print $2}' > $results/service_ssh

這工作,但是失敗的是,在與「22」的任何端口最後一個位置也被添加到文件中,這是錯誤的(例如8222/open,8322/open,1022/open,...)。

我應該使用grep以外的東西來做到這一點嗎?我不是在正則表達式最強大,所以任何幫助將不勝感激。

+0

這工作@Biffen。想讓它成爲答案? – Godzilla74

回答

2

使用word boundary\b):

grep '\b22/open' "$file" | awk '{print $2}' > "$results/service_ssh" 

no need to use cat。引用變量是一個好習慣。

+0

我今天也學到了一些東西:)但是還不知道\ b。謝謝! –

2

試試這個:

grep "^22/open" $file | awk '{print $2}' > $results/service_ssh 

^匹配該行的開始。

或者,如果該行不以「22/open」開頭,則可以使用\b來標記單詞的開頭(如@Biffen所示)。

grep "\b22/open" $file | awk '{print $2}' > $results/service_ssh 
+0

這是行不通的,因爲nmap生成的可輸出輸出不會在行的開頭放置'22/open':'Host:10.10.10.106(host)\t Ports:22/open/tcp // ssh// openssh 6.8(protocol 2.0)/,80/open/tcp // http?///,111/open/tcp // rpcbind(rpcbind V2-4)/(rpcbind:100000 * 2-4)/ 2-4 (rpc#100000)/,' – Godzilla74

+0

我改編了我的答案;你可以按照@biffen的建議在評論中使用\ b –