problem with sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting problem with sed
# 1  
Old 01-22-2009
problem with sed

Hi,

I have this:

bash-2.03$ echo $kk
<programme start="20090124053000 +0100" channel=\CTele-205.laguiatv.com">

I would like to extract= 20090124053000

But I do:

echo $kk |sed -e 's/.*start="\(.*\) .*/\1/'

and it gives me:

20090124053000 +0100"

I can't understand why this command doesn't works. Any help??

Many thanks!
# 2  
Old 01-22-2009
It does not work because sed takes your 1st grouping between the ( and ) and finds a .* which means any number of any characters and even a blank. Then you try to tell it that a blank shows up, marking the end for the grouping, which it can't parse correctly since there could be a blank inside the brackets too (at least I explain it myself with this thesis of ambigous input). So you have to tell it, that the pattern/grouping exists of any character but NOT a blank:

Code:
..| sed -e 's/.*start="\([^ ]*\) .*/\1/'

I changed the . in front of the * inside the \( and \) to [^ ] which means "anything but no blank". This should work:

Code:
echo ${kk}| sed -e 's/.*start="\([^ ]*\) .*/\1/'
20090124053000

# 3  
Old 01-22-2009
Quote:
Originally Posted by zaxxon
It does not work because sed takes your 1st grouping between the ( and ) and finds a .* which means any number of any characters and even a blank. Then you try to tell it that a blank shows up, marking the end for the grouping, which it can't parse correctly since there could be a blank inside the brackets too (at least I explain it myself with this thesis of ambigous input). So you have to tell it, that the pattern/grouping exists of any character but NOT a blank:

Code:
..| sed -e 's/.*start="\([^ ]*\) .*/\1/'

I changed the . in front of the * inside the \( and \) to [^ ] which means "anything but no blank". This should work:

Code:
echo ${kk}| sed -e 's/.*start="\([^ ]*\) .*/\1/'
20090124053000


Many thanks! It works! and than you for the explication
# 4  
Old 01-22-2009
It's known as "greedy matching". The regular expression will always try and match the biggest string that satisfies the specified pattern, which in your case includes the embedded space.
In Perl, you can specify "non greedy" matching by following the * with a ?.

I think you could also have done...
Code:
echo ${kk}| sed -e 's/.*="\([0-9]*\) .* /\1/'

...to isolate the datestamp.

Jerry
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

sed Or Grep Problem OR Terminal Problem?

I don't know if you guys get this problem sometimes at Terminal but I had been having this problem since yesterday :( Maybe I overdid the Terminal. Even the codes that used to work doesn't work anymore. Here is what 's happening: * I wanted to remove lines containing digits so I used this... (25 Replies)
Discussion started by: Nexeu
25 Replies

2. UNIX for Dummies Questions & Answers

sed problem

Hi Folks, I want to replace these numbers with words as the following: $echo 1 11 223 I want to replace each number with it name (e.g. "1" replaced with "one", etc.) just to determine how sed works in such case. Thanks in advance:). Leo (8 Replies)
Discussion started by: leo_ultra_leo
8 Replies

3. Shell Programming and Scripting

sed problem

Hi i am stuck with a very silly problem :mad: below is my code echo 201010_1212_121.xml i need to replace xml with csv so i did echo 201010_1212_121.xml | sed 's/.*\.xml/.*\.csv/' echo 201010_1212_121.xml | sed 's/*.xml/*.csv/' echo 201010_1212_121.xml |... (4 Replies)
Discussion started by: aishsimplesweet
4 Replies

4. Programming

sed problem

Hi all In input file I have records like this: 0,1,0,87,0,0,"6,87","170,03",0,"43,5",0,0,0,0,"6,87","126,53"and in output file I need that these records transforms in : 0 1 0 87 0 0 6,87 170,03 0 43,5 0 0 0 0 6,87 126,53 Could you help me in this case? Please (3 Replies)
Discussion started by: shizik
3 Replies

5. Shell Programming and Scripting

SED - Problem

I have a file with a lot of numbers in it and I need to clean it up and make it look nice and proper. I found this little gem of a one-liner and basically understand what it is doing but I would like to further understand what each part of the command is doing. Being a newb, I am just trying to... (2 Replies)
Discussion started by: genedc1
2 Replies

6. Shell Programming and Scripting

Sed Problem

I have a file which contain many lines see below. "/var/www/abc>" I want to remove Both of these values "" and > (5 Replies)
Discussion started by: aliahsan81
5 Replies

7. Shell Programming and Scripting

Problem in sed.

Hi All! I am trying to use shell variables in a sed statement, but facing an error.I used the double quotes instead if single quotes in the sed statement. # sed -i -e "s/password/$decoded/g;" $CATALINA_HOME/conf/server.xml sed: -e expression #1, char 11: unterminated `s' command # ... (5 Replies)
Discussion started by: nua7
5 Replies

8. Shell Programming and Scripting

Problem with SED

Hi, I have to use SED to remove the prefix "219-" from a text file containing phone numbers and I have to remove the ":" as well. I write the following code but it does not seem to work. Can someone help me please? mohit@mohit-desktop:~$ sed -n s/219-/" "/p corp_phones_bak > noprefix1... (2 Replies)
Discussion started by: mojoman
2 Replies

9. UNIX for Dummies Questions & Answers

Problem with sed

Hi , echo "07/05/2008" | sed 's/\(..\)\/\(..\)\/\(..\)/\3\2\1/' Output :: 20050708 Expected output is 20080507 Iam not getting the bug in this. Thanks for the help -- penchal (4 Replies)
Discussion started by: penchal_boddu
4 Replies

10. UNIX for Dummies Questions & Answers

Sed Problem

I AM TRYING TO APPEND THE HOSTNAME OF A UNIX SERVER I WORK WITH SO I COULD DO A LOADING INTO A DATABASE. THE COMMAND I AM USING IS df -k | sed 's/^/dataserver /' What I intend to do is append the hostname dynamically by using the hostname command instead of having to manually enter... (1 Reply)
Discussion started by: Chelsea
1 Replies
Login or Register to Ask a Question