Regular expression help


Trivia Category: Science: Computers
Difficulty: Easy
In most programming languages, the operator ++ is equivalent to the statement "+= 1".
True or False?

 
Thread Tools Search this Thread
# 1  
Regular expression help

Hi,

I am quite knew to scripting and I am trying to get a regular expression to work to check that a user enters a valid version number such as 1 or 1.1 or 12.3 etc. I dont seem to be able to get it to work as it picks up versions such as 1.......2. I only want it to work with a single dot. Thanks.

Code:
while true
do
        print -- "Please enter the version number"
        read version
        if [[ "${version}" != "[0-9]*\.[0-9]*" ]]
                then
                print -- "Version is not a number"
        else
        break
        fi
done


Last edited by Scott; 01-18-2013 at 07:56 AM.. Reason: Code tags, please...
# 2  
Edit: You're using ksh (or zsh). Check if your version supports the =~ operator.

Try:
Code:
[[ $version =~ ^[0-9]*\.[0-9]*$ ]] || ...

# 3  
Or:
Code:
echo $version | grep -q "^[0-9]*\.[0-9]\+$"
if [ $? -eq 0 ]
then
    echo "Version is a number"
else
    echo "Version is not a number"
fi

# 4  
Thanks both, I havent tried your suggestions yet but is my regular expression correct or am I doing something wrong with my syntax.

I am using korn shell, I believe t88 version.
# 5  
Your regular expression matches: zero or more occurrences of [0-9] followed by a literal dot ., followed by zero or more occurrences of [0-9].
The == / != operators in ksh don't support regular expressions, but only shell pattern matching.
As I already said, check if your ksh version supports the =~ operator (but I doubt, if it's really an x88 implementation).
You should also modify the pattern (if used as a regular expression) to restrict the matching (see the examples in the previous two posts).

If your shell doesn't support regular expressions, use grep, as balajesuri suggested (you may need to use > /dev/null
instead of -q with some grep implementations.
# 6  
Quote:
Originally Posted by radoulov
Your regular expression matches: zero or more occurrences of [0-9] followed by a literal dot ., followed by zero or more occurrences of [0-9].
The == / != operators in ksh don't support regular expressions, but only shell pattern matching.
As I already said, check if your ksh version supports the =~ operator (but I doubt, if it's really an x88 implementation).
You should also modify the pattern (if used as a regular expression) to restrict the matching (see the examples in the previous two posts).

If your shell doesn't support regular expressions, use grep, as balajesuri suggested (you may need to use > /dev/null
instead of -q with some grep implementations.
Thank you for explaining. If my shell doesnt support regular expressions why does some of the regular expression work in my code? The =~ didnt work by the way. I will try usng the grep example instead but how would I make a single dot optionally instead of mandatory, would it be \? after the dot?

Thanks
# 7  
Quote:
Originally Posted by frodo61
Thank you for explaining. If my shell doesnt support regular expressions why does some of the regular expression work in my code?
Give an example, please. They were most probably valid as shell patterns too.

Quote:
I will try usng the grep example instead but how would I make a single dot optionally instead of mandatory, would it be \? after the dot?
To match zero or one . use .?.

EDIT: Correct, in a basic regular expression you should use \?.

Last edited by radoulov; 01-18-2013 at 10:29 AM..
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

2. Shell Programming and Scripting

Regular expression

Hi I need to write a regular expression for a language. That language can have {a, b, c} as alphabet and it must contain minimum one "a" and minimum one "b". Can u help me to write it plz! thanks in advance! (1 Reply)
Discussion started by: nishrestha
1 Replies

3. Shell Programming and Scripting

rm regular expression

$ls hyp1311Aug19 hyp1311Nov04 hyp1311Nov11 hyp1311Nov15 hyp1311Nov18 hyp1311Oct06 hyp1311Oct21 hyp1311Oct28 hyp1311Sep23 hyp1311Sep30 This does not work: rm -rf hyp1311* (9 Replies)
Discussion started by: yanglei_fage
9 Replies

4. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

5. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

6. UNIX for Dummies Questions & Answers

ls with regular expression

I currently list and sort all the files in a directory which begin with an Upper Case C and end with the extension '#finished#'. Here is the command I use: ls -tr $currentDir/*.#finished# what i need to do now is list all the files in a directory that begin with upper case C and end... (3 Replies)
Discussion started by: rkgudde
3 Replies

7. Shell Programming and Scripting

Regular expression Help

Hi What is the meaning of this in regular expression $k =~ s/^\s*//; Plz explain (3 Replies)
Discussion started by: Harikrishna
3 Replies

8. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 Replies

9. Programming

help in regular expression

Hi all, I'm working with flex (version 2.5.4a) on GNU/linux. I need to frame a regular expression which would match cases where word "file" does not occur. Negated character class wont work for me because they enforce "or" clause between different chars (so something like wont work). I would like... (5 Replies)
Discussion started by: Rakesh Ranjan
5 Replies

10. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies

Featured Tech Videos