sed for query


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed for query
# 1  
Old 05-20-2010
sed for query

Hi all, I am trying to remove quite a lot of numbers for a file I have which looks something along the lines of;

Code:
1,2,3,4,5,6 etc

I have a list of numbers I want removing looking like;
Code:
10000
10987
16572
etc
etc

and have been trying to run;

Code:
for id in `cat list` ; do sed -i -e 's/$id,//g' customers.cfg ; done

However when I come to check the original file nothing has changed. I can run;

Code:
for id in `cat list` ; do echo $id ; done

And that works fine, so it looks like my "sed" syntax is incorrect somewhere down the line.

Can anyone point me in the right direction of getting this working?

Thanks!
JayC89
# 2  
Old 05-20-2010
Code:
sed -i -e 's/$id,//g'

$id will not be substituted because it is inside the single backticks of sed. Either use " instead or, use additional backticks to separate the variable to the shell like
Code:
sed -i -e 's/'${id}',//g'

Also if your grep has -f you can use a list as input and if it has -v you can exclude, with -w it treats them as words so that it will look like
Code:
grep -fwv list customers.cfg

You would not need the loops etc. around. You can redirect it to a tmp file and mv it to the old name.
# 3  
Old 05-20-2010
Thanks for the prompt reply Zaxxon!

I have amended my run line to look like

Code:
for id in `cat list` ; do sed -i -e 's/'${id}',//g' customers.cfg ; done

However the same happens; the line runs with no problem however nothing is edited within the file.

Also when I try
Code:
grep -fwv

I get

Code:
grep: wv: No such file or directory

Could the problem be the numbers within my list file?

At the moment when I

Code:
cat list

I get a long line of numbers similar to;

Code:
1
2
3
4
5
etc
etc

Would that affect the outcome of the run line?
JayC89
# 4  
Old 05-20-2010
Even if you got this to work, will it give you the correct result? In your list there are the numbers "1", "2", and "3". It seems that the intent with sed is to match "1,", "2,", and "3,", respectively. So, if the data is "1,2,3,101,102,103,201,202,203,500", the result would be:

After s/1,//g: 2,3,10102,103,20202,203,500
After s/2,//g: 3,1010103,2020203,500
After s/3,//g: 101010202020500

That is what your commands will accomplish. Is this the desired result?

Or should the result after handling "1", "2", an "3" in the list be the removal of the first three digits in the sequence, with the final output being "101,102,103,201,202,203,500" ?

In short, should the items in the list be allowed to match partial numbers in the data? If not, your approach requires modification, because that sed command allows partial matches.

Regards,
Alister

Last edited by alister; 05-20-2010 at 12:43 PM..
# 5  
Old 05-20-2010
Quote:
Originally Posted by alister
Even if you got this to work, will it give you the correct result? In your list there are the numbers "1", "2", and "3". It seems that the intent with sed is to match "1,", "2,", and "3,", respectively. So, if the data is "1,2,3,101,102,103,201,202,203,500", the result would be:

After s/1,//g: 2,3,10102,103,20202,203,500
After s/2,//g: 3,1010103,2020203,500
After s/3,//g: 101010202020500

That is what your commands will accomplish. Is this the desired result?

Or should the result after handling "1", "2", an "3" in the list be the removal of the first three digits in the sequence, with the final output being "101,102,103,201,202,203,500" ?

In short, should the items in the list be allowed to match partial numbers in the data? If not, your approach requires modification, because that sed command allows partial matches.

Regards,
Alister
Hi Alister, thanks for the reply. You are right the command would not produce the correct outcome.

I assume the right way (if it worked at all) would be;

Code:
for id in `cat list` ; do sed -i -e 's/,'${id}',//g' customers.cfg ; done

So it actually searches for the number surrounded by 2x commas instead. Is that correct? However that wouldnt pick up the first number in the sequence would it? e.g
Code:
,1,

wouldnt work in the sequence of;

Code:
1,2,3,4

Is there a way around that?

Thanks again Smilie
JayC89
# 6  
Old 05-20-2010
Maybe
Code:
's/[^,]'${id}',//g'

which should mean either begin of line or a comma
(not sure if this will work...)
# 7  
Old 05-20-2010
Quote:
Originally Posted by pseudocoder
Maybe
Code:
's/[^,]'${id}',//g'

which should mean either begin of line or a comma
(not sure if this will work...)
Actually, that means not-comma followed by the number. It wouldn't help, as that would match a digit and still allow partial matches.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

SED Query

Hi all, I am trying to use SED to input lines to a file in a specific place. So far I have; sed '/#NewEntry/ i\Insert this line' myfile.txt The output is printing to screen correctly but what is the best way to write it back to the file without overwriting everything? I tried adding >... (6 Replies)
Discussion started by: JayC89
6 Replies

2. OS X (Apple)

Sed query

Hello Im fairly familiar with using the sed command for substitution, however I have been passed a script which checks the logged on username and directory type with a sed section which I cant figure out. The sed function has me baffled and I cant find out from the man page what its trying to do... (1 Reply)
Discussion started by: costaanglais
1 Replies

3. Shell Programming and Scripting

sed query

I have a sed query. There is a line which has tilde and I want to separate this line using sed. The line is: ABP_ETC_ROOT=~xdmadm The query to get this line is: sed -n '/\(.*\)~\(.*\)/p' infile I want to get xdmadm from this line and I am using this sed command: sed -n... (5 Replies)
Discussion started by: som.nitk
5 Replies

4. Shell Programming and Scripting

sed query

hi i had posted this earlier.. got no reply !! how to change assigned value in a file using sed suppose the file contains age = 30; how to change it to age =50; i tried sed 's/^age*./age =50;' filename but i am getting the o/p as age =50; 30; plz hlp!! (4 Replies)
Discussion started by: gopsman
4 Replies

5. Shell Programming and Scripting

query on sed

I have done a script using sed which replaces a string in file. I face 2 problems, while using sed command. 1)last line of the file is missing. 2)if i am are using wild card character in the command, Its not taking the next matching pattern ie if I am giving the pattern abc*def to be replaced... (2 Replies)
Discussion started by: iceiceice
2 Replies

6. UNIX for Dummies Questions & Answers

Reg: Query in sed

Hi Penchal, I would appreciate if you can provide me a brief explanation on what you are trying to do in the commnad below. echo "6-9-2008" | sed 's/\(.\)-\(.\)-\(.*\)/\3-0\2-0\1/g' Thanks Amit (1 Reply)
Discussion started by: patelamit009
1 Replies

7. Shell Programming and Scripting

sed related query

Hi I have a file which looks like this //string = "abcd"; //info //string = "*pqrs"; //add string = "#123"; //sub //string = "#1234567890" data = check(string) //string = "#1234567890" I want to modify this as string = "#987"; //mult data = check(string) How do i do that? (1 Reply)
Discussion started by: gopsman
1 Replies

8. Shell Programming and Scripting

SED query

I'm writing a script which word counts the number of lines in two files. If one file is bigger than the other I'd like to edit one of the files to delete some lines to make both the same. It does not matter where in the file the lines are deleted from. It's expected that this will be ran from... (3 Replies)
Discussion started by: chog1010
3 Replies

9. Shell Programming and Scripting

sed query

I have a series of folders /temp/a /temp/b /temp/c In folders a, b, and c, I have files a1.txt..........a20.txt b1.txt..........b40.txt & c1.txt..........c60.txt Each file has the same data format :- Line 1 AAAAA aaaa Line 2 BBB bbbbbb Line 3 CCCC cccccc Etc etc I need to write a... (13 Replies)
Discussion started by: grinder182533
13 Replies

10. Shell Programming and Scripting

sed query..

hi, I have an xml file and I need to replace the tags with different names all at a time here is what I have <cevalue> <cevalue1> <cevalue2> <cevalue3> <cevalue4> <cevalue5> and I need these like these... <cevalue> <cevalue> <cevalue> <cevalue> <cevalue> <cevalue> I tried a few but... (2 Replies)
Discussion started by: mgirinath
2 Replies
Login or Register to Ask a Question