[RndTbl] Oh great RE master

Sean Walberg sean at ertw.com
Wed May 9 16:26:01 CDT 2007


What you had was

Match anything,
Followed by zero or more digits,
Followed by anything

The first match any matched the entire string, which also satisified
the second two conditions.

The * operator is greedy, in perl .*? probably would have worked, I'm
not sure if that feature exists in sed.  Google around for
"backtracking",
O'Reilly had an excellent article on how it works in Perl, which
should be the same for any regex library.

Sean

On 5/9/07, Steve Moffat <Steve.Moffat at ca.ibm.com> wrote:
>
> Well, ya... I guess I did the equivalent (though not so concise) method
> after sending the first email to roundtable...
>
> echo APP-AM005-a | sed 's/[[:alpha:]]//g;s/[[:punct:]]//g'
>
> I like the search inversion though Sean.  Much cleaner!
>
> So the problem I have is solved, thanks Sean.  But why won't my original
> method work?
> The [[:digit:]]* should have matched all the consecutive digits shouldn't
> it?  And then the ( ) brackets should place the match into buffer 1.
>
> Steve
>
> IBM Global Services
> sjm at ca.ibm.com
> (204)792-3245
>
> ----- Forwarded by Steve Moffat/CanWest/IBM on 05/09/2007 04:08 PM -----
>
>              "Sean Walberg"
>              <sean at ertw.com>
>              Sent by:                                                   To
>              swalberg at gmail.co         Steve Moffat/CanWest/IBM at IBMCA
>              m                                                          cc
>                                        roundtable at muug.mb.ca
>                                                                    Subject
>              05/09/2007 04:05          Re: [RndTbl] Oh great RE master
>              PM
>
>
>
>
>
>
>
>
>
>  # echo BUILD-AM005-a | sed 's/[^0-9]//g'
> 005
>
> Sean
>
>
>
> On 5/9/07, Steve Moffat <Steve.Moffat at ca.ibm.com > wrote:
>   Hi All;
>   I've been trying to write a sed function to return only a numeric portion
>   of a string, but can't seem to get it working.
>   The input is a single string of letters and numbers, with the numbers
>   always consecutive.
>   For example: BUILD-AM005-a
>
>   I want to get the 005 out of this string.
>
>   echo BUILD-AM005-a | sed 's/.*\([[:digit:]]\).*/\1/g'
>
>   will return the digit 5. This is good!
>
>   So I add an asterisk to try to match multiple digits like:
>   echo BUILD-AM005-a | sed 's/.*\([[:digit:]]*\).*/\1/g'
>
>   and instead of returning 005, it doesn't match anything, so returns
>   nothing.
>
>   Can any of you RE maters help me out?
>
>   Steve Moffat
>   IBM Global Services
>   sjm at ca.ibm.com
>   (204)792-3245
>
>   _______________________________________________
>   Roundtable mailing list
>   Roundtable at muug.mb.ca
>   http://www.muug.mb.ca/mailman/listinfo/roundtable
>
>
>
>
> --
> Sean Walberg <sean at ertw.com>    http://ertw.com/


-- 
Sean Walberg <sean at ertw.com>    http://ertw.com/


More information about the Roundtable mailing list