Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
929 views
in Technique[技术] by (71.8m points)

linux - Extract email addresses from text file using regex with bash or command line

How can I grep out only the email address using a regex from a file with multiple lines similar to this. (a sql dump to be precise)

Unfortunately I cannot just go back and dump the email column at this point.

Example data:

62372,35896,1,cgreen,Chad,Green,[email protected],123456789,0,,,,,,,,,3,Blah,,2013-05-02 17:42:31.659574,164842,,0,0

I have tried this but it did not work:

grep -o '[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}' file.csv
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If you still want to go the grep -o route, this one works for me:

$ grep -i -o '[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}' file.csv
[email protected]
$ 

I appear to have 2 versions of grep in my path, 2.4.2 and 2.5.1. Only 2.5.1 appears to support the -o option.

Your regular expression is close, but you're missing 2 things:

  • regular expressions are case sensitive. So you can either pass -i to grep or add extra a-z to your square bracket expressions
  • The + modifiers and {} curly braces appear to need to be escaped.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...