2015-05-11 24 views
-1

我有了日誌條目,如文件:結合2個工作GREP表達式爲一個

格式1:

INFO 07 May 2015 15:24:35,146 vert.x-worker-thread-19:40422-6 [28782710226944/personWebApiMultiPass:UnfilteredNamedEntityPipelineProcessor:unfilteredNamedEntityPipelineProcessor] [oiq.contentdigestion.PipelineProcessor] - COMPLETE >10000ms [16992ms]: http://example1.com/long-url/etc.html 

格式2:

INFO 07 May 2015 15:24:34,648 vert.x-worker-thread-12:40464-2 [28782710226945/personWebApiMultiPass:HighlyAssociatedEntitiesPipelineProcessorInternal] [oiq.contentdigestion.PipelineProcessor] - COMPLETE [0 ms]: http://example2.com/yet-another-long-url/etc.html 

注:beteween的區別2行是方括號[]內的時間格式。

要匹配的格式1行,我用下面的grep命令:

grep -E "\[[0-9]* ms\]" filename 

爲2行相匹配的格式,我用下面的grep命令:

grep -E "\[[0-9]*ms\]" filename 

任何人都可以有幫助grep表達式匹配兩個格式行?

回答

0

您需要使空間可選。您可以使用?字符,這意味着`零或擴展正則表達式模式一個比賽做到這一點:

grep -E '\[[0-9]+ ?ms\]' file 

使用ERES,在+字符意味着一個或多個這更有意義在這方面。

或者,在基本模式:

grep '\[[0-9]\{1,\} *ms\]' file 

在這裏,我已經使用\{1,\}作爲+的替代品,這是不符合POSIX標準(雖然你可以使用\+與GNU的grep)。我還使用了*零個或多個)以匹配可選空間。我想你不關心你的情況是否有零個,一個或多個空間。如果你想要嚴格的話,你可以把它改成\{0,1\}

+0

grep'\ [[0-9] \ {1,\} * ms \]'文件工作。謝謝! – user2862093

+0

@ user2862093像我在回答中所做的那樣,您應該轉義外部的''['和'\]'',否則正則表達式的含義會發生變化。 –