SED * operator


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting SED * operator
# 1  
Old 12-23-2008
SED * operator

1. echo "abc 123 abc" | sed 's/[a-z]*/X/'

yields -

X 123 abc

Does this mean the "*" operator matches ONLY the first and
the entire token - "abc" and replaces with "X" ?

2. echo "123 abc" | sed 's/[a-z]*/X/'

yields -

X123 abc

What does this indicate about the "*" operator ??
sinpeak
# 2  
Old 12-23-2008
Hi, I think it matches even before You get to the first character. [a-z]* means zero or more occurrences of any letter in the range a to z. And You have that whereever You search in any file. Sed stops when it has found a match. Maybe You were looking for something like

echo "abc 123 abc" | sed 's/[a-z]*/X/g'
or maybe even
echo "abc 123 abc" | sed 's/[a-z]/X/g'

where the g tells sed to continue searching for matches on the whole line.

/Lakris
# 3  
Old 12-23-2008
Quote:
Originally Posted by sinpeak
1. echo "abc 123 abc" | sed 's/[a-z]*/X/'

yields -

X 123 abc

Does this mean the "*" operator matches ONLY the first and
the entire token - "abc" and replaces with "X" ?
It should match zero or more characters in the character class [a-z]
it will match 'a', 'b', 'c' and not the next space character <' '> so just that part is replaced by 'X'

Quote:
2. echo "123 abc" | sed 's/[a-z]*/X/'

yields -

X123 abc

What does this indicate about the "*" operator ??
Here the very first character is outside the range of [a-z] which means zero character(s) have been matched - hence replacing with 'X'

* - means zero or more character
# 4  
Old 12-23-2008
* dosnt match anything. its a quatifier, that menas, zero, or mroe

z* matchs
""
"z"
"zz"
"zzz"
# 5  
Old 12-24-2008
Thanks to all for the replies.

To matrixmadhan :

Going by your reply -

"It should match zero or more characters in the character class [a-z]
it will match 'a', 'b', 'c' and not the next space character <' '> so just that part is replaced by 'X'"

I tried :-

echo "a 123 abc" | sed 's/[a-z]*/X/'
echo "ab 123 abc" | sed 's/[a-z]*/X/'
echo "abc 123 abc" | sed 's/[a-z]*/X/'

all gave the same output as : X 123 abc

From your reply and the above result I understand - "*" will always start checking from the left in the input string. If it does not find a match , 'X' is replaced at the very beginning of the input string and the job is done.

But if it does find a match , it ends trying to find another match AND 'X' is kept in place of the matched token/characters.

Would request you to please confirm/correct the above.

Thanks

Last edited by sinpeak; 12-24-2008 at 02:12 AM..
sinpeak
# 6  
Old 12-24-2008
Quote:
Originally Posted by broli
* dosnt match anything. its a quatifier, that menas, zero, or mroe

z* matchs
""
"z"
"zz"
"zzz"
I hope you have added the quotes ( "" ) for explanatory purpose Smilie
# 7  
Old 12-24-2008
Quote:
Originally Posted by sinpeak
Thanks to all for the replies.

To matrixmadhan :

Going by your reply -

"It should match zero or more characters in the character class [a-z]
it will match 'a', 'b', 'c' and not the next space character <' '> so just that part is replaced by 'X'"

I tried :-

echo "a 123 abc" | sed 's/[a-z]*/X/'
echo "ab 123 abc" | sed 's/[a-z]*/X/'
echo "abc 123 abc" | sed 's/[a-z]*/X/'

all gave the same output as : X 123 abc

From your reply and the above result I understand - "*" will always start checking from the left in the input string. If it does not find a match , 'X' is replaced at the very beginning of the input string and the job is done.

But if it does find a match , it ends trying to find another match AND 'X' is kept in place of the matched token/characters.

Would request you to please confirm/correct the above.

Thanks

It will check from the start of the string ( <left of the string> ) and I hope this is what you meant, right?

Rest, you are right.

You need to remember this * means match zero or more characters.

There is going to be a definite replacement of zero or more matching characters.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Confusion with ++ operator

Can anyone guide me whats happening in this program given below. I got the Output 7 7 12 49... i was expecting 5 16 9 25. First is simple (3+1)*(3+1) Second is again 3*3; i =4 now Third i =5 then 5*5; i don't know where i am going wrong! #include<stdio.h> #define PRODUCT(x) (x*x) int... (5 Replies)
Discussion started by: Abhishek_kumar
5 Replies

2. Shell Programming and Scripting

sed or operator

hi, I got a requirement to change existing script like below to search additional pattern "DB select". i tried using \| opearator but it is not working :(. Below is the existing code echo $(cat ${1} |sed -n '/Error in/ { N N N /Too many/ { p ... (5 Replies)
Discussion started by: shyamxtasy
5 Replies

3. UNIX for Dummies Questions & Answers

+= operator

im new to bash scripting and im just using online tutorials and trial and error. i wanted to write a script to read numbers from a file and find their sum: #!/bin/bash theSum=0 for line in $(cat numbers.txt) do let "theSum = theSum + $line" echo "$line" done echo "The sum is... (3 Replies)
Discussion started by: astrolux444
3 Replies

4. UNIX for Dummies Questions & Answers

su with << operator

All, THe below is my script , when i use this i am getting nothing . could any one help me to know what is the use of the << operator below su - $8 << supo echo "exportsph $2 $1 $3 $4" exportsph $2 $1 $3 $4 supo i also tried as individual command su - userid << supo , when i do... (3 Replies)
Discussion started by: arunkumar_mca
3 Replies

5. Shell Programming and Scripting

Difference operator

Dear All, Good day, Just i would like to know that is there anything called difference operator in awk? For example, if a file contains 5 columns (as shown below) with both negative and positive values: Col1 Col2 Col3 Col4 Col5 I need to calculate the difference between Col1 and... (3 Replies)
Discussion started by: Fredrick
3 Replies

6. Shell Programming and Scripting

op of logical operator

Why the op of the following code is like this ???? i=4 j=-1 k=0 echo $? echo $? echo $? (5 Replies)
Discussion started by: lipun4u
5 Replies

7. Programming

new operator

Hi, Please clear the 2 questions, 2 Questions, 1) Why the new as a operator? Is there any special reason why it can't be a function like malloc? 2) How are we considering sizeof(),new are as a opearartors? I know + - * / -> , . etc.. are operators, which criteria satisfied by sizeof()... (4 Replies)
Discussion started by: Nagapandi
4 Replies

8. HP-UX

Or operator with if

hi, i was trying to club to test condition with if. if -o ; then it is giving me error message, i wanted to ask how can we check two condtions with one if. (1 Reply)
Discussion started by: babom
1 Replies

9. Shell Programming and Scripting

And operator

I am trying to check two variables and if both are blank I want to set a flag: the_f3_pid=`rsh $target ps -ef | grep "f3.eab" | awk '{print $2}'` the_f7_pid=`rsh $target ps -ef | grep "f7.eab" | awk '{print $2}'` if ; then y=1 fi I get an error: ./script_name: test: 0403-021 ]... (4 Replies)
Discussion started by: rcarnesiii
4 Replies

10. UNIX for Dummies Questions & Answers

Operator question

I need to find out if a variable contains a certain text string, then do something about it. Here is what I mean, but I don't know how to get a "contains" operator # We have volumes called: # /Volumes/BackupsA_K # /Volumes/BackupsL_Z # /Volumes/Backups_Admin # (could be more, etc)... (5 Replies)
Discussion started by: TheCrunge
5 Replies
Login or Register to Ask a Question