2014-01-30 3 views
0

Я пытаюсь извлечь из моей exim_mainlog все электронной почты предметом, который в этом форматеИспользование Grep с регулярным выражением

T="any possible chars here" 

используя мою консоль Centos 6.

Я не эксперт с регулярным выражением, я использую эту команду

# 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]! }" 

не возвращаются. Как сделать, чтобы вернуть все T = "*" результаты из моего exim_mainlog?

Спасибо!

ответ

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 

Который в основном соответствует " после даже # матчей.

Смежные вопросы