2013-08-20 9 views
0

我有條目等grep來提取開始,以一定的圖案

INFO 2013-08-16 13:46:48,660 Index=abc:12 insertTotal=11 ERROR: [doc=abc:d1c3f0] 
INFO 2013-08-16 13:46:48,660 Index=abcd:12 insertTotal=11 ERROR: [doc=def:d1cwqw3f0] 
INFO 2013-08-16 13:46:48,660 Index=def:134 insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=abkfe insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=lmkfe insertTotal=11 
INFO 2013-08-16 13:46:48,660 Index=lmkfe insertTotal=11 

我需要到grep 之間的部分日誌文件結尾的單詞[DOC =]即ABC: d1c3f0和DEF:d1cwqw3f0 所以我希望做類似 ^(ABC | DEF)*] $

回答

1

grep救援:

$ grep -Po '(?<=\[doc=)[^\]]+' file 
abc:d1c3f0 
def:d1cwqw3f0 

它獲取從doc=(?<=\[doc=)部分)到] char([^\]]+部分)之前的所有內容。

或用awk

$ awk -F"[][=]" '{print $5}' file 
abc:d1c3f0 
def:d1cwqw3f0 

-F"[][=]"定義了不同的可能的字段分隔符[]=。然後,它打印第5個「片」。

+0

感謝@fedorqui的內容相匹配。你能否解釋一下答案。 – Macky

+0

@John肯定,相應更新。 – fedorqui

4

sed

sed -n 's/.*\[doc=\(.*\)\].*/\1/p' filename

-n:不打印線

.*\[doc=匹配任何與[doc=

\(.*\)店儘可能多的字符,你可以在結束在緩衝區中,而仍然完成比賽

\].*比賽一]其次是儘可能

\1替換所有的一切與\(.*\)

p打印此行