?* regular expression in sh


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting ?* regular expression in sh
# 1  
Old 07-17-2012
?* regular expression in sh

Hi,
what ?* means in sh script?
I know that ? is equivalent to at least one appearance of a preceding expression and * is equivalent to at least one appearance of preceding expression but I have difficulties with a way in which I should interpret following pattern:

-?*

I would expect that it should match expressions like -, --, --- because I read it as follows:

-? means that regexp should match at least one -. Then, if there are no minuses in the expression it doesn't match. But with at least one minus * will cause that expressions which have two or more minuses will match, too.

But I have tested it and I can see that it matches any string of characters.

What is a reason?

Thanks in advance for responses.
# 2  
Old 07-17-2012
The ? and * which you are talking about are not regex metacharacters (not in your case) but shell glob metacharacters.

=====

Glob:

? - Any one character
* - 0 or more of any character

These are not dependent upon the previous character...

=====

Regex:

? - 0 or 1 occurrence of previous character (or regex)
* - 0 or more occurrences of previous character (or regex)
# 3  
Old 07-17-2012
Thanks,
I have just awared one minute before your post that above expressions are treated as shell metacharacters (after all I use it routinely to specify all files).

But what is a reason for which (as I have checked)

-

match in above string of metacharacters?
# 4  
Old 07-17-2012
When you say it's matching any string of characters, can you give an example of how you're using the pattern to match?

If they are being used as shell metacharacters, it should probably match a '-' followed by at least one other character (any character will do), and then any characters after that if they exist. Basically it should match a two or more character string that starts with '-'.

It should not match a one character string, even if it's just a '-'.
# 5  
Old 07-17-2012
Sorry,
it was my mistake. My above statement was based on the script in which such construction occured, but a match is done not by that expression, but is based on a later comparison with $#.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regular expression

I would like to extract "JDBC Thin Client" from (PROGRAM=JDBC Thin Client); and "C:\Python26\python.exe" from (PROGRAM=C:\Python26\python.exe); "txm_v_awsrf_db.pr" from (PROGRAM=txm_v_awsrf_db.pr). if input line like "(PROGRAM=)", it return unknown. Would you help suggest a regular... (4 Replies)
Discussion started by: cstsang
4 Replies

2. Shell Programming and Scripting

Regular expression

Can someone please explain me what does this mean? ^{1,50}$ (1 Reply)
Discussion started by: Anupam_Halder
1 Replies

3. UNIX for Dummies Questions & Answers

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.... (12 Replies)
Discussion started by: frodo61
12 Replies

4. 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

5. 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

6. 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

7. 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

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

What does the regular expression ['(^[^~]+~).*'] mean?

What does the regular expression +~).*'] mean while using it with regexec.When the string "RCHNUSNT35C~rs07/ASM-RS07" is used with the regular expression +~).*'] regexec gives an error. I know what regexec does,but i do not understand what this expression means wrt to this string... any help... (2 Replies)
Discussion started by: anupamar
2 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
Login or Register to Ask a Question