使用 \n 分隔符从文件中提取所有电子邮件

Extract all emails from a file with \n delimiter

我有一个包含脚本结果的文件,如下所示:

 22012784522fsdjtw5shaqq3w50ttj@fkhvenxh.net|FAIL|DNS failure: NXDOMAIN|net|fkhvenxh.net|22012784522fsdjtw5shaqq3w50ttj|22012784522fsdjtw5shaqq3w50ttj
20peterl@parishnational.com|FAIL|DNS timeout|com|parishnational.com|20peterl|20peterl
20amsaafd@snds.com|FAIL|DNS failure: NOERROR|com|snds.com|20amsaafd|20amsaaf
.342lhau@cmuvm.csv.cmich.edu|FAIL|DNS failure: NXDOMAIN|edu|cmuvm.csv.cmich.edu|342lhau|342lhau
2mf41nguolw@5cdu6on7wj.com|FAIL|DNS failure: NXDOMAIN|com|5cdu6on7wj.com|2mf41nguolw|2mf41nguolw
343qazu@cmuvm.bitnet|FAIL|DNS failure: NXDOMAIN|bitnet|cmuvm.bitnet|343qazu|343qazu
32ec69db3444001@mhbs.lsil.com|FAIL|DNS failure: NXDOMAIN|com|mhbs.lsil.com|32ec69db3444001|32ec69db3444001
2uon4eq@aneti.edu.pl|FAIL|DNS failure: NXDOMAIN|pl|aneti.edu.pl|2uon4eq|2uon4eq
 21juniora@attbi.com|FAIL|DNS failure: NOERROR|com|attbi.com|21juniora|21juniora
22sqrbean@midsouth.rr.com|FAIL|DNS failure: NXDOMAIN|com|midsouth.rr.com|22sqrbean|22sqrbean

我试过了:

  perl -lne 'print  if /([^,@"]+@[^,@"]+)/' input > output

但它没有提取电子邮件或更改文件中的任何内容。

请帮帮我。谢谢!

我忘记了剪切命令:

输入:

 cut -d\| -f1 input > output

输出:

   22012784522fsdjtw5shaqq3w50ttj@fkhvenxh.net
   20peterl@parishnational.com
   20amsaafd@snds.com
   342lhau@cmuvm.csv.cmich.edu
   2mf41nguolw@5cdu6on7wj.com
   343qazu@cmuvm.bitnet
   32ec69db3444001@mhbs.lsil.com
   2uon4eq@aneti.edu.pl
   21juniora@attbi.com
   22sqrbean@midsouth.rr.com

不需要正则表达式,因为您处理的是一种分隔格式,它使事情变得美好而简单。

while (<>) {
    my @fields = split(/\|/, $_);
    print "$fields[0]\n";
}

在一行 Perl 中:

perl -lne "print /([^|]+)/" myfile

它的工作原理是打印它在每行数据中找到的第一个非管道字符序列