我想通過剛纔解析greppable文件輸出到grep從nmap的掃描輸出:Grepping端口22
cat $file | grep "22/open" | awk '{print $2}' > $results/service_ssh
這工作,但是失敗的是,在與「22」的任何端口最後一個位置也被添加到文件中,這是錯誤的(例如8222/open,8322/open,1022/open,...)。
我應該使用grep以外的東西來做到這一點嗎?我不是在正則表達式最強大,所以任何幫助將不勝感激。
我想通過剛纔解析greppable文件輸出到grep從nmap的掃描輸出:Grepping端口22
cat $file | grep "22/open" | awk '{print $2}' > $results/service_ssh
這工作,但是失敗的是,在與「22」的任何端口最後一個位置也被添加到文件中,這是錯誤的(例如8222/open,8322/open,1022/open,...)。
我應該使用grep以外的東西來做到這一點嗎?我不是在正則表達式最強大,所以任何幫助將不勝感激。
使用word boundary(\b
):
grep '\b22/open' "$file" | awk '{print $2}' > "$results/service_ssh"
有no need to use cat
。引用變量是一個好習慣。
我今天也學到了一些東西:)但是還不知道\ b。謝謝! –
試試這個:
grep "^22/open" $file | awk '{print $2}' > $results/service_ssh
^
匹配該行的開始。
或者,如果該行不以「22/open」開頭,則可以使用\b
來標記單詞的開頭(如@Biffen所示)。
grep "\b22/open" $file | awk '{print $2}' > $results/service_ssh
這是行不通的,因爲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
我改編了我的答案;你可以按照@biffen的建議在評論中使用\ b –
這工作@Biffen。想讓它成爲答案? – Godzilla74