2012-09-18 53 views
1

我是新來的bash,並試圖瞭解它的數字。Bash Grep併發送

我有以下幾點:

Sep 18 21:05:40 host kernel: Firewall: *Port Flood* IN=venet0 OUT= MAC= SRC=118.223.69.254 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=9398 PROTO=TCP SPT=9876 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 

我怎麼能拉SRC IP並管道它CSF -d {IP HERE}

我會使用類似

sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' /var/log/messages權?

編輯:

因爲SPT=是在所有的名字,我可以拉那和搶IP一些如何?

+0

你的意思是GREP和SED?什麼是「csf」?你使用什麼系統? –

+1

Grap應該是Grep嗎? –

+0

是的,grep。 CSF就像IPTables。 –

回答

2

類似下面應該工作:

sed -n 's/.*SRC=\([.0-9]*\).*/\1/p' /var/log/messages | xargs csf -d 

xargs將追加從標準輸入參數的命令。請注意,我的正則表達式在IP地址前後與整個行匹配.*,因此,當您進行替換時,所有剩下的就是IP。

通過使用-n選項並將p添加到sed替換的末尾,只會打印與正則表達式匹配的行。

+0

提供的答案是否有方法使其通過文件查看?我似乎得到一個條目; / –

0

海蘭,

使用grep(GNU grep的)2.10,您可以使用P標誌,對Perl兼容的正則表達式,i標誌CASSE不敏感的試驗和o標誌只是顯示的結果。

在下文中,我設置模式爲有效的IP,然後用grep文件

ippattern="\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b" 
grep -Pio "(?<=src=)$ippattern" /var/log/messages 

在grep的絲毫Perl兼容-P標誌,則(?<=XXXX)是背參考而不是由正則表達式捕獲。它只是說我們希望我們的模式先於XXXX。當然,你必須在模式之前寫下來捕捉。

ippattern是一個有效的IP地址。所有情況都被捕獲。

希望這個幫助