![如何从文件中仅 grep 选定的单词?](https://linux22.com/image/1228526/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E4%BB%85%20grep%20%E9%80%89%E5%AE%9A%E7%9A%84%E5%8D%95%E8%AF%8D%EF%BC%9F.png)
我需要从文件中获取所有电子邮件地址的列表。
我试图使用
grep @ filename
但这会返回整行。
有什么办法可以让它仅返回电子邮件地址而不是整行内容?
答案1
答案2
请注意,正确匹配任何有效的电子邮件地址深邃的魔法,因此,如果您真的想捕获所有内容且没有误报或漏报,则应该使用其他人编写的正则表达式。但如果您只是在寻找一个足够grep
好的快速方法,请查看-o
将显示的选项仅有的匹配的文本。
$ grep -Po '\S+@\S+\.\w+' yourfile.txt
这将捕获一些简单的电子邮件地址,以及一些无效的电子邮件地址(例如“@@@@.a”)。根据需要调整正则表达式。例如,这个更严格:
$ grep -Po '[\w+.]+@[\w.]+\.\w+' yourfile.txt
答案3
@rbright 这个解决方案似乎有效。“-o”选项正是我所缺少的!但在收到您的回复之前,我最终只是编写了一个 php 脚本。
$handle = fopen("MYFILE.txt","r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
$pieces = explode(" ", $buffer);
foreach($pieces as $piece){
if( strstr($piece, '@' && $piece != " ")){
echo $piece;
}
}
}
fclose($handle);
}
这是一种快速而粗糙的方法,但它会一直持续到电子邮件地址中没有@为止,而这在我的处境中不太可能发生