2014-01-30 16 views
0

使用grep我想從我的exim_mainlog提取所有的電子郵件的主題這是在用我的Centos 6臺這種格式用正則表達式

T="any possible chars here" 

我不是專家,正則表達式,我使用這個命令

# grep -E -io " T=\"[ A-Za-z0-9-]*+[\s\S]\"" exim_mainlog 

但是它返回只有10%的所有結果,例如導致這樣

T="Welcome to \"My Concepts Support\"" 
T="[ TEST ] Do you want play ?" 
T="{ [email protected]! }" 

都沒有回來。如何從我的 exim_mainlog返回所有T =「*」結果?

謝謝!

回答

0

如何:

grep -E -o '^T=\"(.*)\"$' exim_mainlog 

以上假設,有一個在高於文字以外的行(^$錨)罷了。

例如像:

T="Something i$ h3r3 "^#^*# and h3h3" 
1

在這種情況下,它更容易指定你不想要的字符:

T="[^"]*" 

這符合T="其次是什麼,是不是一個",然後最後"

但是,我注意到在您的擴展示例中,您嵌入了轉義引號。如果你想與它們匹配,以及,你需要沿着線的東西:

T="([^"\\]|\\.)*" 

這符合:

T="  # as expected 
(  # either... 
    [^"\\] # not a " or a \ 
|   # or 
    \\. # a \ followed by anything 
) 
*   # as many times as you want 
"   # then the final quote 

最後的命令則是:

grep -Eo 'T="([^"\\]|\\.)*"' exim_mainlog 
0

grep -P (PCRE)可以在這裏有所幫助:

grep -Pio ' T=".*?(?!((.*?"){2})*[^"]*$)"' file 

在匹配的比賽結束後,基本上匹配"

相關問題