Question on regex with * and .


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Question on regex with * and .
# 1  
Old 07-16-2010
Question on regex with * and .

I have a basic question regarding * and . while using regex:

Code:
# echo 3 | grep ^[0123456789]*$
3

I think I understood why it outputs "3" here (because '*' matches zero or more of the previous character) but I don't understand the output of the following command:

Code:
# echo 3 | grep ^[0123456789].$
#

I thought I would see "3" here as well since '.' matches "one or more of previous characters". no?

Last edited by Scott; 07-19-2010 at 07:57 AM.. Reason: Code tags
# 2  
Old 07-16-2010
Quote:
Originally Posted by mirage
I have a basic question regarding * and . while using regex:

# echo 3 | grep ^[0123456789]*$
3

I think I understood why it outputs "3" here (because '*' matches zero or more of the previous character) but I don't understand the output of the following command:

# echo 3 | grep ^[0123456789].$
#

I thought I would see "3" here as well since '.' matches "one or more of previous characters". no?
Yes, but after the first character there is no more character to match.
Code:
^[0123456789].$

means 1 character begins with one of the characters between the square brackets and one single character at the end of the line.
This User Gave Thanks to Franklin52 For This Post:
# 3  
Old 07-16-2010
understood. Now I realize I also misinterpreted the output of `echo 3 | grep ^[0123456789]*$` even though it showed the result I expected.

I should be reading it as:
"Match characters
^ - starting with
[0123456789] - one of the digits from 0 thro' 9 and
*$ - zero or more of digits from 0 thro' 9 at the end. "

Thus it matches 3, 33, 34, 345 etc.

Thanks a lot!
# 4  
Old 07-16-2010
Quote:
Originally Posted by mirage
'.' matches "one or more of previous characters"
"." (dot) specifies "any single character"
"+" (plus) specifies "one or more of previous"

---------- Post updated at 01:04 AM ---------- Previous update was at 12:59 AM ----------

Quote:
Originally Posted by mirage
I should be reading it as:
"Match characters
^ - starting with
[0123456789] - one of the digits from 0 thro' 9 and
*$ - zero (none) or more of digits from 0 thro' 9 at the end. "

Thus it matches 3, 33, 34, 345 etc.

You should read as:

"Match characters
^ - starting with
[0123456789]* - zero or more digits from 0 thro' 9 and
$ - end."

---------- Post updated at 01:05 AM ---------- Previous update was at 01:04 AM ----------

Quote:
Originally Posted by mirage
I should be reading it as:
"Match characters
^ - starting with
[0123456789] - one of the digits from 0 thro' 9 and
*$ - zero or more of digits from 0 thro' 9 at the end. "

Thus it matches 3, 33, 34, 345 etc.

You should read as:

"Match characters
^ - starting with
[0123456789]* - zero (none) or more digits from 0 thro' 9 and
$ - end."
# 5  
Old 07-19-2010
Code:
# echo 3 | grep ^[123456789]+$
# echo 34 | grep ^[123456789]+$
#

but why not the above print "3" and "34" (respectively) if '+' should match one or more of the previous characters?

Last edited by Scott; 07-19-2010 at 07:56 AM.. Reason: Code tags
# 6  
Old 07-19-2010
Quote:
Originally Posted by mirage
Code:
# echo 3 | grep ^[123456789]+$
# echo 34 | grep ^[123456789]+$

Code:
[house@leonov] echo "3" | grep -E '^[123456789]+$'
3
[house@leonov] echo "34" | grep -E '^[123456789]+$'
34

# 7  
Old 07-19-2010
Hi.

What is printed?

Further to what dr.house said, + loses it's special meaning in basic regular expressions.

Try escaping it:

Code:
$ echo 34 | grep ^[123456789]\\+$
34

(or use extended regular expressions - egrep or grep -E)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regex question

I want to match all occurrence of 01,03,05,07,10,11 at 9th and 10th position of a string . I tried the following but its also matching characters like 33 or 11 on 9th and 10th position . sed "/^\{8\}00/d" A.TXT 000000001000 433483433339 <<< wrong 121121211100 <<< wrong 167710000110... (10 Replies)
Discussion started by: boncuk
10 Replies

2. Shell Programming and Scripting

Regex Question

Hi I am trying to match lines having following string BIND dn="uid= putting something like this is not working : /\sBIND dn="uid=/ Any suggestion. Thanks. John (9 Replies)
Discussion started by: john_prince
9 Replies

3. Shell Programming and Scripting

regex question

Hi guys, I am trying to "grep" or "egrep" the following entry out of the file using regex: MACCDB1 or MACCDB2 The problem is that the file might contain other entries which start with "MACCDB" string. I was trying to use regex to "grep" the exact pattern but it fails to output the correct... (2 Replies)
Discussion started by: aoussenko
2 Replies

4. Shell Programming and Scripting

regex question

Hi guys, I have a file in the following format: cmpr5551 cmpr6002 cmpr93 anne 5454 bbro 434 cmprsvc cmprsvc7 ffgi55 vefe99 cmprsvc8 cmprsvc9 I need to "grep" only the entries which start with "cmpr" followed by the number. All other entries should be excluded. I was trying to use... (3 Replies)
Discussion started by: aoussenko
3 Replies

5. Shell Programming and Scripting

RegEX question

Hi, I am trying to write a regex for myscript and need some input from experts. here is what I must grep for TICKET{Sapce}{Space}{hyphen} so here is the example data TICKET 34554, CT-12345, TICKET 12345: some text here TICKET 2342, CT-12345, MA-12344: some text here TICKET... (5 Replies)
Discussion started by: rider29
5 Replies

6. UNIX for Dummies Questions & Answers

regex question

I have dates in mm/dd/yy format that I wish to convert to yy-mm-dd format. ()/()/() finds them, but when I try to replace with $3-$1-$2 both kate and kwrite treat it as a text literal. (2 Replies)
Discussion started by: porphyry5
2 Replies

7. Shell Programming and Scripting

regex question

Hi, im sure this is really simple but i cant quite figure it out. how do i test against a word at the beginning of the line but up to the point of a delimiter i.e. ":" for example if i wanted to test against the user in the /etc/passwd file peter:x:101:100:peters account:/var/peter:/bin/sh ... (3 Replies)
Discussion started by: hcclnoodles
3 Replies

8. Shell Programming and Scripting

regex question

Hi I have a question on regex There is a line in a script like my_file="$(echo SunMonTueWed | sed "s//_&g") " My question what does the expression _&g do. Obviously in this example the output is _Sun_Mon_Tue_Wed Another question can i use some trick to get the result like... (3 Replies)
Discussion started by: xiamin
3 Replies

9. Shell Programming and Scripting

regex question

I have a simple file test.out that contains data in the form of key1=A|shift1 key2=B|shift2 key3=C|shift3 and so on. I need to get it to print A B C I can do it using lookbehind assertion such as this ( ?<==)() yet I was wondering if there is another way of mutching single... (8 Replies)
Discussion started by: arushunter
8 Replies

10. UNIX for Dummies Questions & Answers

regex question

hi, i got a problem with understanding regular expressions. what i wanna do is scanning the wtmp logfile for ips and if a specific ip is echoed id like to be a part of a text to be assigned to it. the scanning is done with #! /bin/bash cat wtmp | strings | egrep -o "+\.+\.+\." | sort -u... (6 Replies)
Discussion started by: rocketkids
6 Replies
Login or Register to Ask a Question