From owner-freebsd-questions@FreeBSD.ORG Mon Jul 14 09:06:20 2003 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0AF0137B409 for ; Mon, 14 Jul 2003 09:06:20 -0700 (PDT) Received: from corb.mc.mpls.visi.com (corb.mc.mpls.visi.com [208.42.156.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id E0C6843FA3 for ; Mon, 14 Jul 2003 09:04:55 -0700 (PDT) (envelope-from hawkeyd@visi.com) Received: from sheol.localdomain (hawkeyd-fw.dsl.visi.com [208.42.101.193]) by corb.mc.mpls.visi.com (Postfix) with ESMTP id E5EFB8444; Mon, 14 Jul 2003 11:04:54 -0500 (CDT) Received: (from hawkeyd@localhost) by sheol.localdomain (8.11.6p2/8.11.6) id h6EG4sj28226; Mon, 14 Jul 2003 11:04:54 -0500 (CDT) (envelope-from hawkeyd) X-Spam-Policy: http://www.visi.com/~hawkeyd/index.html#mail Date: Mon, 14 Jul 2003 11:04:54 -0500 From: D J Hawkey Jr To: Rob Message-ID: <20030714160454.GA28042@sheol.localdomain> References: <20030714140816.GA27439@sheol.localdomain> <00b001c34a1b$4ad17800$a4b826cb@goo> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <00b001c34a1b$4ad17800$a4b826cb@goo> User-Agent: Mutt/1.4.1i cc: questions at FreeBSD Subject: Re: sed(1) regular expression gurus X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: hawkeyd@visi.com List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Jul 2003 16:06:21 -0000 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@visi.com /\________________/ http://www.visi.com/~hawkeyd/