如何从文件中仅 grep 选定的单词?

如何从文件中仅 grep 选定的单词?

我需要从文件中获取所有电子邮件地址的列表。

我试图使用

grep @ filename

但这会返回整行。

有什么办法可以让它仅返回电子邮件地址而不是整行内容?

答案1

这取决于文件的格式。例如,假设文件有

[电子邮件保护]你不想要的东西
[电子邮件保护]更多你不想要的东西
[电子邮件保护]和更多

那么 awk '/@/{print $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);
} 

这是一种快速而粗糙的方法,但它会一直持续到电子邮件地址中没有@为止,而这在我的处境中不太可能发生

相关内容