sed command problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed command problem
# 1  
Old 06-30-2009
sed command problem

Hi,
I have to separate a pattern from a string. Here are the details:

Pattern: number1.number2.number3.number4.number5
where, number 3,4,5 can be sinngle or double digits
number 1,2 are single digits.

Examples:
7.5.1.10.10
6.0.11.6.34

Now here is the sample string:

Code:
<MyName platform="HP-UX" product="som" pattern="7.5.1.8.9"/>

And here is the sed command that I am using:

Code:
sed -n 's/\(.*\)\(.\)\.\(.\)\.\(.\{1,2\}\)\.\(.\{1,2\}\)\.\(.\{1,2\}\)\(.*\)/\2.\3.\4.\5.\6/p'

The problem in the above case is if number 5 is double digit, it works fine..
If number 5 is single digit, The quotes : " is also printed..
I am confused why..
Please guide..
The above sed command on above string will give:
7.5.1.8.9"
where as 7.5.1.8.9 was expected.

Why is \(.\{1,2\}\) always double digits.. when i have specified that the character can be one or two?


Do I have to specify something like this?
\(\[0-9\]\{1,2\}\)
The following command dosent work either:

Code:
sed -n 's/\(.*\)\(\[0-9\]\)\.\(\[0-9\]\)\.\(\[0-9\]\{1,2\}\)\.\(\[0-9\]\{1,2\}\)\.\(\[0-9\]\{1,2\}\)\(.*\)/\2.\3.\4.\5.\6/p'

What am I missing?
Please guide..
Thanks.. Smilie

Last edited by som.nitk; 06-30-2009 at 08:03 AM..
# 2  
Old 06-30-2009
Try this, the command isolates the part between .*pattern= and the next double quote:

Code:
sed 's/.*pattern="\([^"]*\)".*/\1/'

Regards
# 3  
Old 06-30-2009
Hi,
I am sorry but I did not get your point.
Another thing I want to ask is that, what if there is no double quote, and has some other character?
I just want the sed to pick up number4,5,6 as one or two digit numbers.
What do you suggest in this case?
# 4  
Old 06-30-2009
Code:
$ echo '<MyName platform="HP-UX" product="som" pattern=7.5.1.8.9/>' | sed 's#.*pattern=[^0-9]*\([0-9.][0-9.]*\).*#\1#'
7.5.1.8.9

$ echo '<MyName platform="HP-UX" product="som" pattern="7.5.1.8.9"/>' | sed 's#.*pattern=[^0-9]*\([0-9.][0-9.]*\).*#\1#'
7.5.1.8.9

# 5  
Old 06-30-2009
Brilliant..
Can you please explain this:
Code:
[^0-9]*\([0-9.][0-9.]*\)

Thanks a lot Smilie

---------- Post updated at 06:22 PM ---------- Previous update was at 06:13 PM ----------

Hi Vgersh,
In the second example you gave, how does it ignore the double quotes?
pattern=[^0-9]
This does not contain any double quotes..
Can you please explain?

Thanks..
# 6  
Old 06-30-2009
Quote:
Originally Posted by som.nitk
Brilliant..
Can you please explain this:
Code:
[^0-9]*\([0-9.][0-9.]*\)

Thanks a lot Smilie

---------- Post updated at 06:22 PM ---------- Previous update was at 06:13 PM ----------

Hi Vgersh,
In the second example you gave, how does it ignore the double quotes?
pattern=[^0-9]
This does not contain any double quotes..
Can you please explain?

Thanks..
'pattern=[^0-9]*\([0-9.][0-9.]*\)'

'pattern=' followed by any character BUT a number ( [^0-9]) - repeated 0 or more time ( * ).
Followed by a 'capture' \(...\). The 'capture' consists of any number OR a '.' repeated 1 or more times.
Anything else not matched by a capture, gets eaten up by the trailing greedy '.*'.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Problem with using sed command

I have tried to print the commands which are executed today from history file using sed command by putting the range but i am unable to get it.can anyone help with this is script.I am pasting the script below that i have tried . today=$(date "+%F") echo $today yest=$(date --date="yesterday" ... (2 Replies)
Discussion started by: iosjsk
2 Replies

2. UNIX for Dummies Questions & Answers

sed command problem

Hi i am reading a tutorial on sed below command was given in tutorial. i am not able to understand the working of below command also this command is now working in my enviroment. $ sed -n '1~2p' alarm sed: 1: "1~2p": invalid command code ~ $ need your assitance here (7 Replies)
Discussion started by: scriptor
7 Replies

3. Shell Programming and Scripting

Problem with sed command

Hi, I have a file with data demo_abc demo abc demo-abc abc Now i need to extract only abc from all the lines and print. i used the pattern /*$/ . Can any one help me how to extract text "abc" only. (5 Replies)
Discussion started by: krishna_gnv
5 Replies

4. Shell Programming and Scripting

i need help in sed command problem

i use 'sed' with this syntax " sed "/$lineerr/d" $fileerr > $fileerr"_Bak" && mv $fileerr"_Bak" $fileerr" it's work to remove the line that have the word in $lineerr but it also remove my last line in file too. - -" my input File $ cat fileerr.txt xx|1111111111 xx|2222222222... (5 Replies)
Discussion started by: Chalot99
5 Replies

5. UNIX for Dummies Questions & Answers

Problem with sed command

Hi, I used sed command to replace õ character. sed -n '1,$s/õ/o/gp' inputfile > outputfile The problem is there are 5 records in input file and 2 records has that õ character. So after using the sed command, in output file Iam getting only those records which has character õ replaced by o.... (2 Replies)
Discussion started by: manneni prakash
2 Replies

6. UNIX for Dummies Questions & Answers

where is the problem in my sed command....

for example i have the file that contain several line..and i want to swap the first word and the second word than i store it into new file.. on the command i wrote: sed -e "s/^\(*\)\(*\)/\2\1/g" file > swapfile i think its already correct... but i got the error sed: -e expression... (5 Replies)
Discussion started by: P_W
5 Replies

7. UNIX for Dummies Questions & Answers

Problem while using Sed command

I want to write the output of From_Date_Parm and To_Date_Parm to the target file. I want to write a script by passing the filename. In my case the file is TransactionParams I tried it through command line. noofdays=TransactionParams sed... (2 Replies)
Discussion started by: gopskrish
2 Replies

8. Shell Programming and Scripting

sed command problem

hi I am using "sed" command to find and replace a text in a file. if the searched string is in the last line with no newline character in the end, it doesn't retrive this line. What is the solution to this? i am using sed as: sed -e "s/abc/ABC/g" test.txt where i am replacing abc with ABC (11 Replies)
Discussion started by: dharmesht
11 Replies

9. Shell Programming and Scripting

sed command problem

I am cating a file with passwords into another file. I want to replace the the password with **** and it is not working. Here is my command cat testing | sed 's/`echo ${pass}`/*****/'>>out1 ${pass} is the password that I want to replace before it goes into out1 Anyone know what I am... (1 Reply)
Discussion started by: lesstjm
1 Replies

10. Shell Programming and Scripting

Sed command problem

Hi! here is my problem : $ more file yopyop:FIToB8df02f:10200:351:yoyo:/home/yopyop:/usr/bin/ksh $grep yopyop file | sed s/FIToB8df02f/passe/ yopyop:passe:10200:351:yoyo:/home/yopyop:/usr/bin/ksh $more file yopyop:FIToB8df02f:10200:351:yoyo:/home/yopyop:/usr/bin/ksh ...when i... (1 Reply)
Discussion started by: tomapam
1 Replies
Login or Register to Ask a Question