Date: Mon, 20 Aug 2007 12:03:24 -0500 From: Reid Linnemann <lreid@cs.okstate.edu> To: Christer Hermansson <mail@chdevelopment.se> Cc: freebsd-questions@freebsd.org Subject: Re: Regular expressions Message-ID: <46C9C95C.8030606@cs.okstate.edu> In-Reply-To: <46C9C846.7060100@cs.okstate.edu> References: <46C726A8.9010404@chdevelopment.se> <6.0.0.22.2.20070818130942.02634918@mail.computinginnovations.com> <46C77BD7.1080609@chdevelopment.se> <46C9C846.7060100@cs.okstate.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Written by Reid Linnemann on 08/20/07 11:58>> > Written by Christer Hermansson on 08/18/07 18:08>> >> Derek Ragona wrote: >>> At 12:04 PM 8/18/2007, Christer Hermansson wrote: >>>> I also found some basic example at >>>> http://www.grymoire.com/Unix/Sh.html#uh-88 : >>>> >>>> --------8<--------8<--------8<--------8<--------8<-------- >>>> >>>> #!/bin/sh >>>> >>>> echo "Type in a number" >>>> read ans >>>> number=`expr "$ans" : "([0-9]*)"` >>>> if [ "$number" != "$ans" ]; then >>>> echo "Not a number" >>>> elif [ "$number" -eq 0 ]; then >>>> echo "Nothing was typed" >>>> else >>>> echo "$number is a fine number" >>>> fi >>>> >>>> --------8<--------8<--------8<--------8<--------8<-------- >>>> >>>> The above example doesn't work on my freebsd box. Maybe I need to >>>> update my system, sitting with 6.0R which never been updated. >>>> >>> >>> You have a syntax error using expr. Do a man on expr for more >>> details but if you change that line from: >>> number=`expr "$ans" : "([0-9]*)"` >>> to: >>> number=`expr "$ans" : "\([0-9]*\)"` >>> >>> You will get the desired results. >>> >>> Also when debugging scripts remember to add: >>> set -x >>> to your script on the second line, and see what the script lines are >>> actually doing. >>> >>> -Derek >>> >> Thanks Derek ! Now both the example and my own code works for me. I >> changed my code from "^[A-Za-z0-9_-]+$" to "\([A-Za-z0-9_-]*\)" It >> seems that FreeBSD's expr want some different syntax than the webbased >> test tool at http://regexlib.com/RETester.aspx >> > > No, your expression is double quoted, which means the shell will expand > it before passing it to expr. Parens are expanded by shells, they > manipulate the order of operations (i.e. 'echo 1 || echo 2 && echo 3' > vs. '(echo 1 || echo 2) && echo 3'). As a result, you must escape the > parens or the shell will gobble them up. Disregard that, I am a moron. :/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46C9C95C.8030606>