我的文件结果如下:
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
但它没有提取电子邮件或更改文件中的任何内容。
请帮帮我。谢谢!
答案 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";
}