Sponsored Content
Top Forums Shell Programming and Scripting Understanding regex behaviour when using quantifiers Post 302749653 by Don Cragun on Friday 28th of December 2012 09:23:13 PM
Old 12-28-2012
Quote:
Originally Posted by chidori
Code:
# echo "Teest string" | sed 's/e*/=>replaced=</'
=>replaced<=Teest string

So, in the above code , sed replaces at the start. does that mean sed using the pattern e* settles to zero occurence ? Why sed was not able to replace Teest string.

Code:
# echo "Teest string" | sed 's/e*//g'
Tst string

How does it work when global flag turned on ?
Despite what DGPickett said, perl had no affect on the description of regular expression in the POSIX standards.

There are several variations on RE processing, but there are three main types (basic regular expressions [BREs], extended regular expressions [EREs], and pathname pattern matching) in the standards (POSIX, the Single UNIX Specification [SUS], the System V Interface Definition [SVID], and the Linux Standard Base [LSB]). According to POSIX, SUS and SVID, sed and a bunch of other utilities use BREs, awk and a bunch of other utilities use EREs, and the shell and a bunch of other utilities use pathname pattern matching when expanding pathnames. POSIX has about five full pages describing BREs, three and a half pages that describe the differences between BREs and EREs and another four and a half pages that give the formal grammar for the interpretation of BREs and EREs, and about two and half pages that describe the differences between pattern matching and REs.

Some utilities (like grep) have options to choose between BREs, EREs, and fixed strings. Although not specified by the standards, some implementations have options for sed to choose between BREs and EREs, but using EREs with sed is not portable.

Meanwhile, back to your question. In the BREs used in sed, the expression e* matches zero or more occurrences of an e. The beginning of the string Teest string (before the "T") matches zero occurrences of "e", so the pipeline:
Code:
echo "Teest string" | sed 's/e*/=>replaced=</'

produces:
Code:
=>replaced=<Teest string

and the command:
Code:
sed 's/e*/=>replaced=</g'

would replace every occurrence of zero or more "e"s with your replacement string. I.e.,
Code:
=>replaced=<T=>replaced=<s=>replaced=<t=>replaced=< =>replaced=<s=>replaced=<t=>replaced=<r=>replaced=<i=>replaced=<n=>replaced=<g=>replaced=<

Two portable sed pipelines to do what you were trying to do are:
Code:
echo "Teest string" | sed 's/e\{1,\}/=>replaced=</'

or (as DGPickett suggested):
Code:
echo "Teest string" | sed 's/ee*/=>replaced=</'

which replaces the first occurrence of one or more "e"s with the specified replacement string. In this case:
Code:
T=>replaced=<st string

These 2 Users Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Converting perl regex to sed regex

I am having trouble parsing rpm filenames in a shell script.. I found a snippet of perl code that will perform the task but I really don't have time to rewrite the entire script in perl. I cannot for the life of me convert this code into something sed-friendly: if ($rpm =~ /(*)-(*)-(*)\.(.*)/)... (1 Reply)
Discussion started by: suntzu
1 Replies

2. Shell Programming and Scripting

find: "weird" regex behaviour

I have these two files in current dir: oos.txt oos_(copy).txt I execute this find command:find . -regex './oos*.txt'And this outputs only the first file (oos.txt)! :confused: Only if I add another asterisk to the find find . -regex './oos*.*txt' do I also get the second file... (7 Replies)
Discussion started by: courteous
7 Replies

3. Shell Programming and Scripting

Understanding a regex

Hi, Please help me to understand the bold segments in the below regex. Both are of same type whose meaning I am looking for. find . \( -iregex './\{6,10\}./src' \) -type d -maxdepth 2 Output: ./20111210.0/src In continuation to above: sed -e 's|./\(*.\{1,3\}\).*|\1|g' Output: ... (4 Replies)
Discussion started by: vibhor_agarwali
4 Replies

4. Shell Programming and Scripting

help understanding regex with grep & sed

I have the following line of code that works wonders. I just don't completely understand it as I am just starting to learn regex. Can you help me understand exactly what is happening here? find . -type f | grep -v '^\.$' | sed 's!\.\/!!' (4 Replies)
Discussion started by: trogdortheburni
4 Replies

5. Shell Programming and Scripting

Need Quick help on Understanding sed Regex

Hi Guys, Could you please kindly explain what exactly the below SED command will do ? I am quite confused and i assumed that, sed 's/*$/ /' 1. It will remove tab and extra spaces .. with single space. The issue is if it is removing tab then it should be Î right .. please assist.... (3 Replies)
Discussion started by: Nandy
3 Replies

6. Shell Programming and Scripting

Perl, RegEx - Help me to understand the regex!

I am not a big expert in regex and have just little understanding of that language. Could you help me to understand the regular Perl expression: ^(?!if\b|else\b|while\b|)(?:+?\s+){1,6}(+\s*)\(*\) *?(?:^*;?+){0,10}\{ ------ This is regex to select functions from a C/C++ source and defined in... (2 Replies)
Discussion started by: alex_5161
2 Replies

7. Shell Programming and Scripting

Need help understanding this Regex.

Hi everyone, This regex looks simple and yet it doesn't make sense how it's manipulating the output. ifconfig -a eth0 Link encap:Ethernet HWaddr 00:0c:49:c2:35:6v inet addr:192.16.1.1 Bcast:192.168.226.255 Mask:255.255.255.0 inet6 addr:... (2 Replies)
Discussion started by: xcod3r
2 Replies

8. Shell Programming and Scripting

Sendmail K command regex: adding exclusion/negative lookahead to regex -a@MATCH

I'm trying to get some exclusions into our sendmail regular expression for the K command. The following configuration & regex works: LOCAL_CONFIG # Kcheckaddress regex -a@MATCH +<@+?\.++?\.(us|info|to|br|bid|cn|ru) LOCAL_RULESETS SLocal_check_mail # check address against various regex... (0 Replies)
Discussion started by: RobbieTheK
0 Replies

9. UNIX for Beginners Questions & Answers

Help with understanding this regex in a Perl script parsing a 'complex' string

Hi, I need some guidance with understanding this Perl script below. I am not the author of the script and the author has not leave any documentation. I supposed it is meant to be 'easy' if you're a Perl or regex guru. I am having problem understanding what regex to use :confused: The script does... (3 Replies)
Discussion started by: newbie_01
3 Replies

10. Programming

Regarding a GREAT site for understanding and Visualizing regex patterns.

Hello All, While googling on regex I came across a site named Regulex Regulex:JavaScript Regular Expression Visualizer I have written a simple regex ^(a|b|c)(*)@(.*) and could see its visualization; one could export it too, following is the screen shot. ... (3 Replies)
Discussion started by: RavinderSingh13
3 Replies
All times are GMT -4. The time now is 11:09 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy