Regular Expression In Sed


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Regular Expression In Sed
# 1  
Old 05-12-2011
Regular Expression In Sed

Hi ,
I am learing sed

Code:
 echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|'

is returning
Code:
abc def 456

i was hoping
Code:
abc def

"\1" should only print the occurence of the first pattern
but according to my understanding it is just removing the first occurence of the second pattern Smilie

Please can some onle explain what's really happing here and if i want to get only first patternt using "\( \)" how to achieve that
# 2  
Old 05-12-2011
sed's s command only hits the first match unless you add a g flag:

Code:
$ echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|'
abc def 456
$ echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|g'
abcdef
$

This User Gave Thanks to Perderabo For This Post:
# 3  
Old 05-12-2011
Quote:
Originally Posted by Perderabo
sed's s command only hits the first match unless you add a g flag:
Only partially true :
... Or until you specify another match number ...

Code:
# echo 'ABCDEFG'
ABCDEFG
# echo 'ABCDEFG' | sed 's/././'
.BCDEFG
# echo 'ABCDEFG' | sed 's/././1'
.BCDEFG
# echo 'ABCDEFG' | sed 's/././2'
A.CDEFG
# echo 'ABCDEFG' | sed 's/././3'
AB.DEFG
# echo 'ABCDEFG' | sed 's/././5'
ABCD.FG
# echo 'ABCDEFG' | sed 's/././g'
.......
#

---------- Post updated at 09:48 PM ---------- Previous update was at 09:36 PM ----------

Regarding your case, i would suggest you target the unwanted pattern and delete it (substitute it with empty string)
Code:
# echo  abc 123 def 456  | sed 's/ [0-9][0-9]*//g'
abc def

This User Gave Thanks to ctsgnb For This Post:
# 4  
Old 05-13-2011
Quote:
Originally Posted by Perderabo
sed's s command only hits the first match unless you add a g flag:
Code:
$ echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|'
abc def 456

This is really incredible Smilie, I thought it would print 'abc 123 def' omitting '456' for the \1, because of the greedy matching nature of sed's regular expression. This is really a new thing I learnt today..
# 5  
Old 05-13-2011
Thank you Perderabo and ctsgnb now the things are clear to me
# 6  
Old 05-13-2011
Code:
# echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|'
abc def 456
# echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|2'
abc 123 def
# echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|g'
abc def

# 7  
Old 05-13-2011
Quote:
Originally Posted by ctsgnb
Code:
# echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|2'
abc 123 def
# echo  abc 123 def 456  |  sed 's|\([a-z]*\) \([0-9]*\)|\1|g'
abc def

But, I am getting different ouput on GNU sed version 4.1.5
Code:
echo abc 123 def 456 | sed 's|\([a-z]*\) \([0-9]*\)|\1|2'

# Ans: abc 123def 456
 
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed regular expression

Hi , I need to remove pipe character from a |^ delimeted file. Something like |^tran|sformers||^|revenge |of fallen|^ to |^transformers|^revenge of fallen|^... Cold anybody please help to build the regular expression using sed . many thanks. Please use code tags next time for... (1 Reply)
Discussion started by: kokjek
1 Replies

2. Shell Programming and Scripting

I am learning regular expression in sed,Please help me understand the use curly bracket in sed,

I am learning SED and just following the shell scripting book, i have trouble understanding the grep and sed statement, Question : 1 __________ /opt/oracle/work/antony>cat teledir.txt jai sharma 25853670 chanchal singhvi 9831545629 anil aggarwal 9830263298 shyam saksena 23217847 lalit... (7 Replies)
Discussion started by: Antony Ankrose
7 Replies

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

4. Shell Programming and Scripting

Help with sed regular expression

Hi all, I want to get a substring from a string based on given delimiter, for example: str="foo|bar|baz" with delimiter "|", I want to get one substring at each time with the order number the substring in the whole string, given 1 to get "foo", given 2 to get "bar", given 3 to get "baz", I... (2 Replies)
Discussion started by: Roy987
2 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

sed regular expression help

please consider this: echo "11111*X*005010X279~ST*270*1111111*005010X279~BHT*0011*11" | sed 's/.*\(005010X(\d)(\d)(\d)*\).*$/\1/'i'm searching for first occurrence of 005010X while leaving rest of characters out. :confused: any tips? thnx in advance guys. (7 Replies)
Discussion started by: grep01
7 Replies

7. Shell Programming and Scripting

Regular expression (sed)

Hi I need to get text that are within "" For example File: asdasd "test test2" sadasds asdda asdasd "demo demo2" Output: test test2 demo demo2 Any help is good Thank you (12 Replies)
Discussion started by: blito_loco
12 Replies

8. Shell Programming and Scripting

Regular expression with SED

Hi! I'm trying to write a regexp but I have no luck... I have a string like this: param1=sometext&param2=hello&param3=bye Also, the string can be simply: param2=hello I want to return the value of param2: "hello". How can I do this? Thanks. (3 Replies)
Discussion started by: GagleKas
3 Replies

9. Shell Programming and Scripting

Regular expression with sed

Hi, I'm trying following:echo "test line XA24433 test" | sed 's/.*X\(.*\)/X\1/' XA24433 test While I want the output as: XA24433 I want to grab the words starting with letter X till the next space, this word can be anywhere in the line. (9 Replies)
Discussion started by: nervous
9 Replies
Login or Register to Ask a Question