Date: Mon, 20 Aug 2007 11:58:46 -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: <46C9C846.7060100@cs.okstate.edu> In-Reply-To: <46C77BD7.1080609@chdevelopment.se> References: <46C726A8.9010404@chdevelopment.se> <6.0.0.22.2.20070818130942.02634918@mail.computinginnovations.com> <46C77BD7.1080609@chdevelopment.se>
next in thread | previous in thread | raw e-mail | index | archive | help
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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46C9C846.7060100>