从文本文件(SED?AWK?)提取电子邮件地址

从文本文件(SED?AWK?)提取电子邮件地址,sed,awk,Sed,Awk,我有一个从Outlook中获取的电子邮件地址文件,因此获取的表单中的地址显示如下: -A@b.com -C@d.com -A@b.com,JOHN DOE, RICHARD ROE,"\O=USERS:SAM" awk -F, -f e.awk file 等等 我希望最后得到的是一个文本文件,每行上都有一个有效格式的地址。所以A@b.com可以,但“RICHARD ROE”和“\O=USERS等”不可以。也许这可以通过SED或AWK实现?您可以尝试: awk -F, '{ for (i

我有一个从Outlook中获取的电子邮件地址文件,因此获取的表单中的地址显示如下:

-A@b.com
-C@d.com
-A@b.com,JOHN DOE, RICHARD ROE,"\O=USERS:SAM" 
awk -F, -f e.awk file
等等

我希望最后得到的是一个文本文件,每行上都有一个有效格式的地址。所以A@b.com可以,但“RICHARD ROE”和“\O=USERS等”不可以。也许这可以通过SED或AWK实现?

您可以尝试:

awk -F, '{
  for (i=1; i<=NF; i++)
    if ($i ~ /@/)
       print $i
}' file
其中
e.awk
为:

{
    for (i=1; i<=NF; i++)
        if ($i ~ /@/)
            print $i
}
{
对于(i=1;i您可以尝试:

awk -F, '{
  for (i=1; i<=NF; i++)
    if ($i ~ /@/)
       print $i
}' file
其中
e.awk
为:

{
    for (i=1; i<=NF; i++)
        if ($i ~ /@/)
            print $i
}
{
对于(i=1;i您可以尝试:

awk -F, '{
  for (i=1; i<=NF; i++)
    if ($i ~ /@/)
       print $i
}' file
其中
e.awk
为:

{
    for (i=1; i<=NF; i++)
        if ($i ~ /@/)
            print $i
}
{
对于(i=1;i您可以尝试:

awk -F, '{
  for (i=1; i<=NF; i++)
    if ($i ~ /@/)
       print $i
}' file
其中
e.awk
为:

{
    for (i=1; i<=NF; i++)
        if ($i ~ /@/)
            print $i
}
{

对于(i=1;i,考虑到您发布的输入文件,这里有一种使用GNU awk的方法:

$ gawk -v RS='[[:alnum:]_.]+@[[:alnum:]_]+[.][[:alnum:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
它只查找简单的电子邮件地址,例如。“bob@the_moon.net或“乔”。Brown@google.com",如果您可以找到一个合适的RE来捕获允许的更深奥的电子邮件地址,或者发布一个更具代表性的输入文件(如果您有示例),请随意更改RS的设置。下面是另一个RE,它通过指定电子邮件地址中不能包含的字符而不是可以包含的字符来工作:

$ gawk -v RS='[^[:space:][:punct:]]+@[^[:space:][:punct:]]+[.][^[:space:][:punct:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
同样,它适用于您发布的样本,但可能不适用于其他人。按摩以适应


对于其他awk,您可以通过设置FS或使用match()和循环来执行相同的操作。

对于您发布的输入文件,GNU awk有一种方法:

$ gawk -v RS='[[:alnum:]_.]+@[[:alnum:]_]+[.][[:alnum:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
它只查找简单的电子邮件地址,例如。“bob@the_moon.net或“乔”。Brown@google.com",如果您可以找到一个合适的RE来捕获允许的更深奥的电子邮件地址,或者发布一个更具代表性的输入文件(如果您有示例),请随意更改RS的设置。下面是另一个RE,它通过指定电子邮件地址中不能包含的字符而不是可以包含的字符来工作:

$ gawk -v RS='[^[:space:][:punct:]]+@[^[:space:][:punct:]]+[.][^[:space:][:punct:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
同样,它适用于您发布的样本,但可能不适用于其他人。按摩以适应


对于其他awk,您可以通过设置FS或使用match()和循环来执行相同的操作。

对于您发布的输入文件,GNU awk有一种方法:

$ gawk -v RS='[[:alnum:]_.]+@[[:alnum:]_]+[.][[:alnum:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
它只查找简单的电子邮件地址,例如。“bob@the_moon.net或“乔”。Brown@google.com",如果您可以找到一个合适的RE来捕获允许的更深奥的电子邮件地址,或者发布一个更具代表性的输入文件(如果您有示例),请随意更改RS的设置。下面是另一个RE,它通过指定电子邮件地址中不能包含的字符而不是可以包含的字符来工作:

$ gawk -v RS='[^[:space:][:punct:]]+@[^[:space:][:punct:]]+[.][^[:space:][:punct:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
同样,它适用于您发布的样本,但可能不适用于其他人。按摩以适应


对于其他awk,您可以通过设置FS或使用match()和循环来执行相同的操作。

对于您发布的输入文件,GNU awk有一种方法:

$ gawk -v RS='[[:alnum:]_.]+@[[:alnum:]_]+[.][[:alnum:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
它只查找简单的电子邮件地址,例如。“bob@the_moon.net或“乔”。Brown@google.com",如果您可以找到一个合适的RE来捕获允许的更深奥的电子邮件地址,或者发布一个更具代表性的输入文件(如果您有示例),请随意更改RS的设置。下面是另一个RE,它通过指定电子邮件地址中不能包含的字符而不是可以包含的字符来工作:

$ gawk -v RS='[^[:space:][:punct:]]+@[^[:space:][:punct:]]+[.][^[:space:][:punct:]]+' 'RT{print RT}' file
A@b.com
C@d.com
A@b.com
同样,它适用于您发布的样本,但可能不适用于其他人。按摩以适应




对于其他AWK,您也可以通过设置FS或使用match()和循环来执行相同的操作。

问题是什么?我如何操作文本文件来提取格式正确的电子邮件地址而不使用cruft?电子邮件地址始终是行的第一部分吗?它以
(逗号)结尾?遗憾的是,没有。有时行以逗号结尾,有时以分号结尾,有时以双引号结尾,例如:通常一行至少包含一个有效的电子邮件地址,但并非总是如此。问题是其他材料的电子邮件地址格式无效。问题是什么?我如何操作文本文件以正确提取没有cruft的med电子邮件地址?电子邮件地址总是行的第一部分吗?它以
(逗号)结尾?遗憾的是,没有。有时行以逗号结尾,有时以分号结尾,有时以双引号结尾,例如:通常一行至少包含一个有效的电子邮件地址,但并非总是如此。问题是其他材料的电子邮件地址格式无效。问题是什么?我如何操作文本文件以正确提取没有cruft的med电子邮件地址?电子邮件地址总是行的第一部分吗?它以
(逗号)结尾?遗憾的是,没有。有时行以逗号结尾,有时以分号结尾,有时以双引号结尾,例如:通常一行至少包含一个有效的电子邮件地址,但并非总是如此。问题是其他材料的电子邮件地址格式无效。问题是什么?我如何操作文本文件以正确提取没有cruft的med电子邮件地址?电子邮件地址总是行的第一部分吗?它以
(逗号)结尾?不幸的是,没有。有时行以逗号结尾,有时以分号结尾,有时以双引号结尾,例如:通常一行至少包含一个有效的电子邮件地址,但并非总是如此。问题是附加材料的电子邮件地址格式无效。awk-F,'>for(i=1;i if($i~/@)>print$i>}'backup02.txt awk:source line 2 context处的语法错误为>>>对于@user26732,在
之前和之后的
if
print
我剪切并粘贴了代码;这次我输入了:awk-F,'for(i=1;i@user26732是的,你完全正确..我好像忘记了开头的大括号
{
,请看我的更新..我不确定发生了什么事:$awk-F'{for(I=1;iawk-F'>>for(I=1;I if($I~/@)>print$I>}backup02.txt awk:source line 2上下文中的语法错误为@user26732 you h>>