sed(1) regular expression gurus
D J Hawkey Jr
hawkeyd at visi.com
Mon Jul 14 09:06:21 PDT 2003
On Jul 15, at 12:49 AM, Rob wrote:
>
> awk --posix -F'[^0-9A-Za-z.]+' '
> $1 ~ /by/ { result = $2
> for (i=3; i<=NF; i++) {
> if ($i ~ /^([0-9]+\.){3}[0-9]+$/) {
> result = result " " $i
> }
> }
> print result
> }'
>
> There may be 'neater' ways of doing it, but it's the most concise
> example I could come up with.
This is better than anything I've dreamed up with sed or awk, and is
really close, but it fails on this:
by nospam.mc.mpls.visi.com (8.11.6/8.11.6.2) with ESMTP id 3A4E07B03
The parenthetical is a [hacked] sendmail version. I don't see how the
script fails, though, as you do test for a full/complete "dotted quad",
and even test for a BOL and EOL on either side it. The "8.11.6" shouldn't
match. I changed the '+'es to "{1,3}"s for even better precision in the
"if (...)", but it didn't make any difference (nor should it have).
BTW, why the "one or more" flag in the FS assignment?
> You need to include the --posix option to get the '{3}' notation to work
> (peculiar to GNU awk).
Kinda throws portability out the window, but I'll settle for it.
Dave
--
______________________ ______________________
\__________________ \ D. J. HAWKEY JR. / __________________/
\________________/\ hawkeyd at visi.com /\________________/
http://www.visi.com/~hawkeyd/
More information about the freebsd-questions
mailing list