使用grep与正则表达式

时间:2014-01-30 09:19:43

标签: regex grep

我试图从我的exim_mainlog中提取所有格式为

的电子邮件主题
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="{ another@test! }"

未退回。怎么做从我的返回所有T =“*”结果 exim_mainlog?

谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这个怎么样:

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

上面假设除了你的文字之外,没有其他内容(^$锚)。

例如:

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

答案 2 :(得分:0)

grep -P (PCRE)可以在这里提供帮助:

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

甚至匹配#匹配后基本匹配"