At 10:36 PM 3/30/97 +0000, Adam Lasnik wrote:
>THE PROBLEM:
>I tried to just add the string "set listname topics:+name for " to the
>e-mail addresses, but Listserv choked... because so many of the addresses
>had more than just [log in to unmask] :-(
>i.e... "Jim Smith" <[log in to unmask]> and
>jsmith ([log in to unmask]) and so on :-(
>
>WHAT I HUMBLY ASK FROM YOU SMART FOLKS OUT THERE:
>Can anyone suggest:
>-- a utility
>-- a Perl string
>-- a tecnique in Microsoft Word or Win95 Write
>...to enable me to extract from this list (and future lists) just
> [log in to unmask]
>
>Thanks very much in advance for your help :-)
I'm a little unclear as to what format(s) your name list might contain.
The following awk script will handle the cases you listed (and will
also handle the output from a QUERY or REVIEW command, skipping
lines that contain no "@").
Put it in a file called "getaddr.awk".
You can change the line that says:
print addr
to
print "quiet set listname option for", addr
if you want to build a file of commands, for example. If there are
other conditions than I've dealt with -- ending in comma, or enclosed
in <> or () -- the extension should be pretty obvious.
It leaves "weird but legal" cases such as
"I @m th3 gr8t3st" <[log in to unmask]>
for hand processing.
Note: since you mentioned perl, I'm assuming you have access to awk.
There are PC versions of both; I used MKS Toolkit's to test this.
In a pinch, you can always take your list and the script to a UNIX
system and run it there (every UNIX will have awk).
Hope this helps,
Stan
========== cut here ==========
# print "plain old" email addresses
# getaddr.awk - S. Ryckman - 31 March 1997
#
# invocation:
# awk -f getaddr.awk inputfile > outputfile
#
# warning: only lightly tested
# any line with two "@" is a problem:
[log in to unmask]*@/ {
print "DO THIS BY HAND:", $0
next
}
# one "@"
/@/ {
# find word containing the "@"
for(k=1;k<=NF;k++)
if(index($k,"@")>0)
break;
addr = $k
# if it ends in a comma, get rid of it:
if(substr(addr,length(addr),1)==",")
addr=substr(addr,1,length(addr)-1)
# if it's in <>, dump those:
if(substr(addr,1,1)=="<" && \
substr(addr,length(addr),1)==">")
addr=substr(addr,2,length(addr)-2)
# if it's in (), dump those:
if(substr(addr,1,1)=="(" && \
substr(addr,length(addr),1)==")")
addr=substr(addr,2,length(addr)-2)
print addr
next
}
# if lines without "@" need processing, put it before the "next"
# else you can omit the following:
{
next
}
|