使用 \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
它的工作原理是打印它在每行数据中找到的第一个非管道字符序列
我有一个包含脚本结果的文件,如下所示:
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
它的工作原理是打印它在每行数据中找到的第一个非管道字符序列