Number substitution with sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Number substitution with sed
# 1  
Old 09-05-2012
Number substitution with sed

Hello,

Here is what i'm trying to do :
I want to replace any occurence of the string "abc=123" by "abc=999" except if the pattern is followed by a digit (I want to replace only "abc=123" and not "abc=1234")

One of the most promissing command I tried was :
Code:
 
echo 'abc=123
abc=1234
xyzabc=123&fghij=555&abc=123
abc=234'|sed 's/abc=123[^0-9]/abc=999/g'

but the output is :
Code:
abc=123
abc=1234
xyzabc=999fghij=555&abc=123
abc=234

What I'm trying to get is :
Code:
abc=999
abc=1234
xyzabc=999&fghij=555&abc=999
abc=234

Can anyone help ?

Last edited by nikop51000; 09-05-2012 at 12:23 PM.. Reason: forgot the & after 999 in the "What I'm trying to get" part
# 2  
Old 09-05-2012
Code:
$ echo 'abc=123
abc=1234
xyzabc=123&fghij=555&abc=123 abc=234' | sed 's/\b123\b/999/g'
Output:
abc=999
abc=1234
xyzabc=999&fghij=555&abc=999 abc=234

# 3  
Old 09-05-2012
You're matching the non-digit as part of the sed expression, but not including it in the replacement (hence your lost '&'). Try something like:
Code:
sed 's/abc=123\([^0-9]\)/abc=999\1/g'

(\1 is whatever matched the first bracket expression \(...\))
This User Gave Thanks to CarloM For This Post:
# 4  
Old 09-05-2012
This isn't maybe the best way, but it does work:


Code:
sed -E 's/$/./; s/abc=123([^0-9])/abc=999\1/g; s/.$//;'

At least with your small example.


If you are using AT&T's AST sed, or a BSD flavour of sed the -E option will be different.

---------- Post updated at 11:53 ---------- Previous update was at 11:49 ----------

@CarloM -- my thought exactly, but it still wasn't treating the newline as [^0-9], so I added the dot to ensure abc=123$ had some character after it. Maybe I was doing something wrong, but I couldn't get it to work just with the back reference.


Did I miss something?
This User Gave Thanks to agama For This Post:
# 5  
Old 09-05-2012
sed -E uses ERE, so it should know alternation:
Code:
sed -E 's/abc=123([^0-9]|$)/abc=999\1/g'

These 3 Users Gave Thanks to Scrutinizer For This Post:
# 6  
Old 09-05-2012
Quote:
Originally Posted by agama
Did I miss something?
More likely I didn't notice, but I can't check right now.
# 7  
Old 09-06-2012
Thanks to all

Hi guys !
Thanks for all your messages !
I didn't think it would be so quick!

The -E option doesn't work with my sed (I'm on SunOS 5.10) so I'm now using this :
Code:
echo 'abc=123
abc=1234
xyzabc=123&fghij=555&abc=123abc=234' | sed -e 's/abc=123$/abc=999/g' -e 's/abc=123\([^0-9]\)/abc=999\1/g'

This is ok for me but I'd like to know if there's a better way...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed substitution

Hi everyone, I need very simple sed command to change a parameter in a text file. I have a line in this text which is like set xx 0.5 A program reads this file and does some algebraic calculations. So to make a parameter scan I need to change the value of xx. I thought I can do... (7 Replies)
Discussion started by: hayreter
7 Replies

2. UNIX for Dummies Questions & Answers

sed substitution

How can you use sed with a line of code that reads: 67899:Bill:Williams:Maple Dr.:45908600 Let us say we want to replace Maple Dr. with Oak St. (1 Reply)
Discussion started by: yonkers062986
1 Replies

3. Shell Programming and Scripting

sed substitution

Hello, I have two files. File1 is normal txt file and File2 contains list of line numbers. e.g. File2: 3 6 9 ..... I need to replace a character in File1 in lines (taken from File2). For that I am using a "for" loop: for i in $(cat File2) do sed "$i s/Y/N/" File1 done but my... (3 Replies)
Discussion started by: shekhar2010us
3 Replies

4. Shell Programming and Scripting

Substitution with sed

I have a file with some numbers having single quotes around them which I want to remove. i.e. '923930' -> 23930 If it can be done without using sed thats fine. I have tried with sed but can't think how to replace this pattern on only the numbers (13 Replies)
Discussion started by: user_invalid
13 Replies

5. UNIX for Dummies Questions & Answers

Help with sed substitution

I'm a noob to unix, and I have a line of data like the following: title=Boston|tcolor=green|desc=Large city in New England|url=www.boston.com Is there a way to change a field value with sed substitution? (i.e. change tcolor=green to tcolor=blue) I figured out: sed... (19 Replies)
Discussion started by: stabby
19 Replies

6. Shell Programming and Scripting

sed substitution

Using sed I'm trying to replace 'string' with ']' while retaining case and ignoring words with 'string' in it along with additional characters like 'strings' and those which already contain the ] wrapper. I'm hoping to do it with sed and the right expression, if possible. Example: Apple... (2 Replies)
Discussion started by: tom.lee
2 Replies

7. Shell Programming and Scripting

SED Substitution

Hi , I am stuck up in the below scenario:- I need to read a file name (eg A.txt) name frm another file (eg B.txt) and then I need to search for a particular expression in A.txt and substitute it with another expression. How can I use SED inside SHELL Scripting and command prompt as well to... (1 Reply)
Discussion started by: shubhranshu
1 Replies

8. Shell Programming and Scripting

Substitution using SED

Hi , I am stuck up in the below scenario:- I need to read a file name (eg A.txt) name frm another file (eg B.txt) and then I need to search for a particular expression in A.txt and substitute it with another expression. How can I use SED inside SHELL Scripting and command prompt as... (2 Replies)
Discussion started by: shubhranshu
2 Replies

9. UNIX for Dummies Questions & Answers

sed substitution

Hi, I have a set of files containing strings like I.TEST1_TEST2 or B.ESSA_ESSB for example. Does somebody know how to substitute these strings whith the same name and an extension "_V1" (ie. I.TEST1_TEST2_V1) using sed command or else ? (3 Replies)
Discussion started by: jo_aze
3 Replies

10. UNIX for Dummies Questions & Answers

Substitution using sed

I know we can substitute a string using sed but how? For example: sed 's/(old variable)/(new variable)/ details.dat Am I suppose to put $old variable or whatever? Because I tried many times, it didnt work by putting $old variable. Am I suppose to enclose it with "" or ''? Please help (3 Replies)
Discussion started by: Ohji
3 Replies
Login or Register to Ask a Question