2013-10-16 72 views
0

我使用grep來搜索一些日誌文件,我的日誌條目以外的模式如下:grep的突出大於搜索一個

[2013-10-16 14:39:17] {"email":"[email protected]", "tel":"123456789", "address":"some address", "status":"0"} 

(這是一個樣本,每個條目有很多數據)

我想要做的是:用模式篩選,突出另一種模式,比如我篩選狀態= 1

cat log | grep 'status":1' 

這完美的作品,並輸出類似:

[2013-10-16 14:39:17] {「email」:「[email protected]」,「tel」:「123456789」,「地址」:「某地址」,「狀態」: 「1‘}

我想要做的就是要突出電子郵件輸出到有類似:

[2013年10月16日14點39分17秒] {‘電子郵件’:’ [email protected], 」電話「: 」123456789「, 」地址「: 」有些地址「, 」狀態「:」 1「}

注意,我只是想強調的電子郵件,而不是過濾!

是可能的嗎?

感謝

+0

目前尚不清楚_why_你會想這樣做? – devnull

回答

2

只是grep再次要突出顯示模式:

cat log | grep 'status":"1' | grep '"email":"[^"]*"'

0

假設你已經凸顯已經在工作,你會怎麼做:

$ grep -e '"email":"[^"]*"' -e '"status":"1"' file 

如果沒有突出已經設置使用--color選項:

$ grep --color=auto -e '"email":"[^"]*"' -e '"status":"1"' file 

這將通過的1狀態過濾,並強調所有的電子郵件和狀態」。如果你只是想那麼電子郵件突出:

$ grep '"status":"0"' file | grep '"email":"[^"]*"' 
0

另外,儘量處理的文字使用awk過濾使用。有了這樣

$ cat test.txt 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"1"} 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"0"} 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"1"} 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"0"} 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"1"} 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"0"} 
[2013-10-16 14:39:17] {"email":"[email protected]", "status":"1"} 

文件試試這個命令

cat test.txt | grep \"status\":\"1\" | awk '{print "\033[32m",$3,"\033[0m",$4}'