Question on my sed command


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Question on my sed command
# 1  
Old 05-10-2011
Question on my sed command

So I have this sed command below. The content of the tmp.txt file is

Code:
dv01:at01,at05,at02:at04

Code:
sed 's/\:.*\,/\,/g' tmp.txt

Which produces
dv01,at02:at04
and I'm trying to use sed to get me
Code:
dv01,at05,at02

Stripping out the parts leading with ":". My sed is pretty basic, can anyone see at a glance how to fix the above command?
# 2  
Old 05-10-2011
Code:
 echo 'dv01:at01,at05,at02:at04' |sed -r 's/.*:(.*):.*/\1/'
at01,at05,at02

# 3  
Old 05-10-2011
A bit of explanation as to why yours wasn't behaving as desired. First, you don't need to escape the colon or comma which makes it easier to read:

Code:
sed 's/:.*,/,/g' tmp.txt

Regular expression matching is greedy so "colon followed by zero or more characters (.*) followed by a comma will match

Code:
dv01:at01,at05,

(all the way through the last comma) and not the desired dv01:at01.

I prefer to avoid using back references (\1 in the previous example) as they are fairly inefficient. This will work and should be more efficient:

Code:
$ echo "dv01:at01,at05:xxxx,at02:at04" | /usr/bin/sed -r 's/:[^,]*,/,/g; s/:[^,]*$//'
dv01,at05,at02

The code matches a colon, then all characters that are not a comma up to the next comma (just what we want to match) and replaces it with a comma. The last replacement handles the case where the pattern is at the end of the line (no trailing comma).

I do observe that the other example is removing the characters before the colon, and your example indicates that you want everything between colon and comma removed. My example removes the :yyyy from xxxx:yyyy, which is what I assumed you wanted.

Last edited by agama; 05-10-2011 at 10:16 PM.. Reason: Clarification
This User Gave Thanks to agama For This Post:
# 4  
Old 05-11-2011
Bit obscure and cumbersome 'sed' code:
Code:
echo 'dv01:at01,at05,at02:at04' | sed 's/\([^:]*\):\(.*\),\([^,]*\),\([^:]*\):.*/\1,\3,\4/'

gives output "dv01,at05,at02"

---------- Post updated at 10:58 AM ---------- Previous update was at 10:48 AM ----------

Quote:
Originally Posted by yinyuemi
Code:
 echo 'dv01:at01,at05,at02:at04' |sed -r 's/.*:(.*):.*/\1/'
at01,at05,at02

This fails for the agama's input "dv01:at01,at05:xxxx,at02:at04" and it is not at all giving "dv01"
# 5  
Old 05-11-2011
Thanks for all the info, I ended up using agama's example.

But I also found this works pretty good.
Code:
echo 'dv01:at01,at05,at02:at04' | sed 's/:....//g'
dv01,at05,at02

# 6  
Old 05-12-2011
Quote:
Originally Posted by royalibrahim
...for the agama's input "dv01:at01,at05:xxxx,at02:at04" ...
Oops. I hadn't realised that I had left in that :xxxx. I was using that as a test to ensure that if there were such a pattern that it would do the job in addition to the original request.

Quote:
Originally Posted by J-Man
But I also found this works pretty good.
Code:
echo 'dv01:at01,at05,at02:at04' | sed 's/:....//g'
dv01,at05,at02

Yep, that'll work. Your need (something quick to pass over a static set of data, or something that will be used on an ongoing basis) will likely influence what you write in the future. I prefer generic solutions especially if the script will be used on an ongoing basis. Your alternative would be very quickly implemented if you just needed it for a one time shot.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Sed command usage question

How to work x in sed command? I know x command is swaps the contents of pattern space and hold space. But i am unable to understand it's working? (4 Replies)
Discussion started by: Vartika18
4 Replies

2. Shell Programming and Scripting

sed and awk giving error ./sample.sh: line 13: sed: command not found

Hi, I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :- ./sample.sh: line... (12 Replies)
Discussion started by: satishmallidi
12 Replies

3. Shell Programming and Scripting

sed command question

Hey all, so I've been experimenting with SED today, no experience before today, so if you're not patient, stop reading now! :P I will attempt to explain this as simply as possible, without having to post massive walls of shitty code. Basically, I've created a small sed script to go through an... (9 Replies)
Discussion started by: Parrakarry
9 Replies

4. Shell Programming and Scripting

after sed command file shows '????' question marks

Hi All, I am trying to replace a string in a oracle LDT file file extension .ldt. I am using the following command: sed "s/Test Number Viewer/Test Number 1/g" TEST_LIEN_FORM.ldt > TEST_LIEN_FORM.ldt.tmp mv TEST_LIEN_FORM.ldt.tmp TEST_LIEN_FORM.ldt But after the command, the file... (2 Replies)
Discussion started by: veena484
2 Replies

5. Shell Programming and Scripting

Sed command garbled question

for j in $(cat ${list_B}) do to_replace_2=$(grep $j ${useralias}_2) sed "s/^${j}/${to_replace_2}/p" ${entries} > ${entries}_2 mv ${entries}_2 ${entries} done Hi, I've the above sed command running in a script. Its basically looping through a file and replacing its beginning of line... (8 Replies)
Discussion started by: Jazmania
8 Replies

6. Shell Programming and Scripting

Sed command question on Solaris

Hi, I'm trying to find the first field in a text file with the below sed command but it doesn't seem to be correct for running on Solaris.. It has no problem running on AIX. Anyone got a suggestion what the problem is? sed 's/^\(\+\) /OK/' The eventual goal is to separate the columns in a... (5 Replies)
Discussion started by: Jazmania
5 Replies

7. Shell Programming and Scripting

Question about a sed command

Hi guys, I'm currently trying to understand a piece of shell script and it has some sed commands. I've been looking through sed tutorials to figure out what it does but still no luck :confused: Can any of you guys tell me what this particular command does? sed -i '1i\.options' a/* ... (1 Reply)
Discussion started by: chu816
1 Replies

8. Shell Programming and Scripting

Loop with sed command to replace line with sed command in it

Okay, title is kind of confusion, but basically, I have a lot of scripts on a server that I need to replace a ps command, however, the new ps command I'm trying to replace the current one with pipes to sed at one point. So now I am attempting to create another script that replaces that line. ... (1 Reply)
Discussion started by: cbo0485
1 Replies

9. Shell Programming and Scripting

Sed Question 1. (Don't quite know how to use sed! Thanks)

Write a sed script to extract the year, rank, and stock for the most recent 10 years available in the file top10_mktval.csv, and output in the following format: ------------------------------ YEAR |RANK| STOCK ------------------------------ 2007 | 1 | Exxon... (1 Reply)
Discussion started by: beibeiatNY
1 Replies

10. Shell Programming and Scripting

Quick Question on sed command in shell script

Hello, I have the following line in one of my shell scripts. It works fine when the search string($SERACH_STR) exists in the logfile($ALERTLOG) but if the search string does not exist this line errors out at run time. Is there a way to make this line return 0 if it is not able to find the... (4 Replies)
Discussion started by: luft
4 Replies
Login or Register to Ask a Question