2014-02-14 61 views
0

考慮這個日誌文件混亂上的grep模式搜索

SN  PID  Date       Status 
1  P01  Fri Feb 14 19:32:36 IST 2014 Alive 
2  P02  Fri Feb 14 19:32:36 IST 2014 Alive 
3  P03  Fri Feb 14 19:32:36 IST 2014 Alive 
4  P04  Fri Feb 14 19:32:36 IST 2014 Alive 
5  P05  Fri Feb 14 19:32:36 IST 2014 Alive 
6  P06  Fri Feb 14 19:32:36 IST 2014 Alive 
7  P07  Fri Feb 14 19:32:36 IST 2014 Alive 
8  P08  Fri Feb 14 19:32:36 IST 2014 Alive 
9  P09  Fri Feb 14 19:32:36 IST 2014 Alive 
10  P010 Fri Feb 14 19:32:36 IST 2014 Alive 

當我做=>grep "P01" File
輸出爲:(如預期

1  P01  Fri Feb 14 19:32:36 IST 2014 Alive 
10  P010 Fri Feb 14 19:32:36 IST 2014 Alive 

當我這樣做= >grep " P01 " File注意前後空間P01
我沒有得到任何輸出!

問:grep匹配模式在一條線上,所以「P01」(周圍空間)應與P01的第一PID,因爲它有它周圍的空間....但目前看來,這種邏輯是錯誤的....我在這裏想念什麼明顯的事情!!!?

回答

2

如果日誌使用的標籤不是空格,那麼您的grep模式將不匹配。我想補充字邊界的字你想找到:

grep '\<P01\>' file 

如果你真的想在你的方式使用的空白,使用一個:

grep '[[:blank:]]P01[[:blank:]]' file # horizontal whitespace, tabs and spaces 
grep -P '\sP01\s' file     # using Perl regex 
+0

是的,它是一個'製表space' ,所以'tab-space'被認爲與grep中的'white-space'不同? – NoobEditor

+1

通常「空白」是爲了包含空格,製表符,換行符,回車符,退格符,垂直製表符。選項卡與空間不同,所以是的,grep對待它們的方式不同。字符類'[[:space:]]'相當於'[\ t \ n \ r \ b \ v]',字符類'[[:blank:]]'相當於'[\ t] '(我認爲這是接近正確的...)見https://en.wikipedia.org/wiki/Ascii –

+0

進一步調查:'\ b'不包括在'[[:space:]]' –