使用\ n分隔符

时间:2015-10-18 21:00:57

标签: perl extract

我的文件结果如下:

 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 $1 if /([^,@"]+@[^,@"]+)/' input > output

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

请帮帮我。谢谢!

3 个答案:

答案 0 :(得分:1)

在Perl的一行中:

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

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

答案 1 :(得分:0)

我忘记了剪切命令:

输入:

 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

答案 2 :(得分:0)

不需要正则表达式,因为你正在处理分隔格式,这使得事情变得简单明了。

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