Sponsored Content
Top Forums Shell Programming and Scripting SED With Regex to extract Email Address Post 302618943 by gary_w on Wednesday 4th of April 2012 03:33:37 PM
Old 04-04-2012
For the sake of another way to do it, I was interested in this question and did as little searching. I found a perl script at this site: Extract email addresses from big file. - Unix / Linux / BSD

Now I do not know perl but it seems to work.
Code:
$ cat x
#!/bin/ksh
echo "Email address is ab-c.x-yz@comp.com" |perl -wne'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}'

$ ./x
ab-c.x-yz@comp.com
$

 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Send email where # is in the email address - Using Unix

Hi All, How do I send an email using malix where email address contains a #. I have a email address like this : #test@test.com I want to send email like malix -s "TEST" #test@test.com < SOMEFILE I tried \# but doesn't work. Please let me know how we can achieve this? I am in... (1 Reply)
Discussion started by: jingi1234
1 Replies

2. UNIX for Advanced & Expert Users

Regex to match IP address

What do you think of this regex to match IP address? I have been reading up on regex and have seen some really long ones for IP. Would this fail in any scenarios? (+\.){3}* (5 Replies)
Discussion started by: glev2005
5 Replies

3. Shell Programming and Scripting

Using SED command in a shell script: Unterminated address regex

Hi All, I am trying to use a sed command in a shell script in order to delete some lines in a file and I got the following error message. I don't understand why it is not working 'cause I have tried with simple quotes, then with double-quotes, and it is not working. sed: -e expression #1,... (7 Replies)
Discussion started by: Alpha3363
7 Replies

4. Shell Programming and Scripting

Converting perl regex to sed regex

I am having trouble parsing rpm filenames in a shell script.. I found a snippet of perl code that will perform the task but I really don't have time to rewrite the entire script in perl. I cannot for the life of me convert this code into something sed-friendly: if ($rpm =~ /(*)-(*)-(*)\.(.*)/)... (1 Reply)
Discussion started by: suntzu
1 Replies

5. Shell Programming and Scripting

Regex: Extract substring between 2 separator

Hi Input: aa-bb-cc-dd.ee.ff.gg Output: dd I want to get the word after the last '-' until the first dot I have tried with regex lookbehind and lookahead like this: (?<=-).*(?=\.) but his returns too much bb-cc-dd.ee.ff (7 Replies)
Discussion started by: chitech
7 Replies

6. Solaris

Find and sed for an email address in Solaris 10

in Solaris 10 I am able to run: find . -type f -name "copy*" exec grep example.com {} \; and I get results. but when I try to find and sed: find . -type f -name "copy*" exec sed -e 's/user@example\.com/user2@example\.com' {} \; the command executes correctly but doesn't change... (6 Replies)
Discussion started by: os2mac
6 Replies

7. Forum Support Area for Unregistered Users & Account Problems

Cant use certain email address

I tried to re-register using my new email address which is <firstname>@<surname>.me But it never sent out the email confirmation. I had to hit the back button and use my gmail address instead and it came through instantly. Is there a problem with using .me addresses? (1 Reply)
Discussion started by: frustin
1 Replies

8. Shell Programming and Scripting

Sed: -e expression #1, char 16: unterminated address regex

I am trying to grep for a particular text (Do action on cell BL330) in a text file(sample.gz) which is searched in the content filtered by date+timestamp (2016-09-14 01:09:56,796 to 2016-09-15 04:10:29,719) on a remote machine and finally write the output into a output file on a local machine. ... (23 Replies)
Discussion started by: rbadveti
23 Replies

9. UNIX for Beginners Questions & Answers

Sed: -e expression #1, char 20: unterminated address regex

I am trying to add word in last of particular line. the same command syntex is running on prompt. but in bash script give error."sed: -e expression #1, char 20: unterminated address regex" Please help. for i in `cat servername`; do ssh -q -t root@$i sed -i '/simple_allow_groups =/s/$/,... (4 Replies)
Discussion started by: yash_message
4 Replies
Email::Find(3pm)					User Contributed Perl Documentation					  Email::Find(3pm)

NAME
Email::Find - Find RFC 822 email addresses in plain text SYNOPSIS
use Email::Find; # new object oriented interface my $finder = Email::Find->new(&callback); my $num_found - $finder->find($text); # good old functional style $num_found = find_emails($text, &callback); DESCRIPTION
Email::Find is a module for finding a subset of RFC 822 email addresses in arbitrary text (see "CAVEATS"). The addresses it finds are not guaranteed to exist or even actually be email addresses at all (see "CAVEATS"), but they will be valid RFC 822 syntax. Email::Find will perform some heuristics to avoid some of the more obvious red herrings and false addresses, but there's only so much which can be done without a human. METHODS
new $finder = Email::Find->new(&callback); Constructs new Email::Find object. Specified callback will be called with each email as they're found. find $num_emails_found = $finder->find($text); Finds email addresses in the text and executes callback registered. The callback is given two arguments. The first is a Mail::Address object representing the address found. The second is the actual original email as found in the text. Whatever the callback returns will replace the original text. FUNCTIONS
For backward compatibility, Email::Find exports one function, find_emails(). It works very similar to URI::Find's find_uris(). EXAMPLES
use Email::Find; # Simply print out all the addresses found leaving the text undisturbed. my $finder = Email::Find->new(sub { my($email, $orig_email) = @_; print "Found ".$email->format." "; return $orig_email; }); $finder->find($text); # For each email found, ping its host to see if its alive. require Net::Ping; $ping = Net::Ping->new; my %Pinged = (); my $finder = Email::Find->new(sub { my($email, $orig_email) = @_; my $host = $email->host; next if exists $Pinged{$host}; $Pinged{$host} = $ping->ping($host); }); $finder->find($text); while( my($host, $up) = each %Pinged ) { print "$host is ". $up ? 'up' : 'down' ." "; } # Count how many addresses are found. my $finder = Email::Find->new(sub { $_[1] }); print "Found ", $finder->find($text), " addresses "; # Wrap each address in an HTML mailto link. my $finder = Email::Find->new( sub { my($email, $orig_email) = @_; my($address) = $email->format; return qq|<a href="mailto:$address">$orig_email</a>|; }, ); $finder->find($text); SUBCLASSING
If you want to change the way this module works in finding email address, you can do it by making your subclass of Email::Find, which over- rides "addr_regex" and "do_validate" method. For example, the following class can additionally find email addresses with dot before at mark. This is illegal in RFC822, see Email::Valid::Loose for details. package Email::Find::Loose; use base qw(Email::Find); use Email::Valid::Loose; # should return regex, which Email::Find will use in finding # strings which are "thought to be" email addresses sub addr_regex { return $Email::Valid::Loose::Addr_spec_re; } # should validate $addr is a valid email or not. # if so, return the address as a string. # else, return undef sub do_validate { my($self, $addr) = @_; return Email::Valid::Loose->address($addr); } Let's see another example, which validates if the address is an existent one or not, with Mail::CheckUser module. package Email::Find::Existent; use base qw(Email::Find); use Mail::CheckUser qw(check_email); sub do_validate { my($self, $addr) = @_; return check_email($addr) ? $addr : undef; } CAVEATS
Why a subset of RFC 822? I say that this module finds a subset of RFC 822 because if I attempted to look for all possible valid RFC 822 addresses I'd wind up practically matching the entire block of text! The complete specification is so wide open that its difficult to construct soemthing that's not an RFC 822 address. To keep myself sane, I look for the 'address spec' or 'global address' part of an RFC 822 address. This is the part which most people consider to be an email address (the 'foo@bar.com' part) and it is also the part which contains the information necessary for delivery. Why are some of the matches not email addresses? Alas, many things which aren't email addresses look like email addresses and parse just fine as them. The biggest headache is email and usenet and email message IDs. I do my best to avoid them, but there's only so much cleverness you can pack into one library. AUTHORS
Copyright 2000, 2001 Michael G Schwern <schwern@pobox.com>. All rights reserved. Current maintainer is Tatsuhiko Miyagawa <miyagawa@bulknews.net>. THANKS
Schwern thanks to Jeremy Howard for his patch to make it work under 5.005. LICENSE
This module is free software; you may redistribute it and/or modify it under the same terms as Perl itself. The author STRONGLY SUGGESTS that this module not be used for the purposes of sending unsolicited email (ie. spamming) in any way, shape or form or for the purposes of generating lists for commercial sale. If you use this module for spamming I reserve the right to make fun of you. SEE ALSO
Email::Valid, RFC 822, URI::Find, Apache::AntiSpam, Email::Valid::Loose perl v5.8.8 2006-03-18 Email::Find(3pm)
All times are GMT -4. The time now is 10:31 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy