使用带有bash或命令行的正则表达式从文本文件中提取电子邮件地址

Arr*_*ar1 13 regex linux bash

如何使用具有与此类似的多行的文件中的正则表达式来仅使用电子邮件地址.(确切地说是一个sql转储)

不幸的是,我现在不能回过头来转发电子邮件专栏.

示例数据:

62372,35896,1,cgreen,Chad,Green,cgreen@blah.com,123456789,0,,,,,,,,,3,Blah,,2013-05-02 17:42:31.659574,164842,,0,0
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不起作用:

grep -o '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}' file.csv
Run Code Online (Sandbox Code Playgroud)

Dig*_*uma 34

如果你还想去grep -o路线,这个适合我:

$ grep -i -o '[A-Z0-9._%+-]\+@[A-Z0-9.-]\+\.[A-Z]\{2,4\}' file.csv
cgreen@blah.com
$ 
Run Code Online (Sandbox Code Playgroud)

我的路径中似乎有两个版本的grep,2.4.2和2.5.1.只有2.5.1似乎支持-o选项.

你的正则表达式很接近,但你错过了两件事:

  • 正则表达式区分大小写.因此,您可以传递-i给grep或a-z向方括号表达式添加额外内容
  • +改性剂和{}大括号似乎需要进行转义.


anu*_*ava 3

如果您知道字段位置,那么使用 awk 或 cut 会容易得多:

awk -F ',' '{print $7}' file
Run Code Online (Sandbox Code Playgroud)

或者

cut -d ',' -f7 file
Run Code Online (Sandbox Code Playgroud)