Linux - General This Linux forum is for general Linux questions and discussion.
If it is Linux Related and doesn't seem to fit in any other forum then this is the place. |
| Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
 |
GNU/Linux Basic Guide
This 255-page guide will provide you with the keys to understand the philosophy of free software, teach you how to use and handle it, and give you the tools required to move easily in the world of GNU/Linux. Many users and administrators will be taking their first steps with this GNU/Linux Basic guide and it will show you how to approach and solve the problems you encounter.
Click Here to receive this Complete Guide absolutely free. |
|
 |
05-03-2007, 12:18 PM
|
#1
|
|
QmailToaster Developer
Registered: Dec 2005
Location: Burlington, NC
Distribution: CentOS, Voyage, Debian, Fedora
Posts: 220
Rep:
|
sed question for search and replace
I'm running into a problem where I don't see what I'm doing wrong. I have a line in a config file (it will always be line 38, FWIW):
$rcmail_config['default_host'] = '';
That I want to replace with:
$rcmail_config['default_host'] = 'localhost';
No problem. Trusty sed should get the job done, right?
sed -e 's/$rcmail_config[\'default_host\'] = \'\';/$rcmail_config[\'default_host\'] = \'localhost\';/g' main.config
But I think I have my escapes wrong somewhere.
Can someone tell me where I messed up?
Thanks in advance.
|
|
|
|
05-03-2007, 12:30 PM
|
#2
|
|
Member
Registered: Jun 2005
Distribution: Gentoo
Posts: 552
Rep:
|
It might be because of this: The poorly undocumented ;
HTH,
Centinul
|
|
|
|
05-03-2007, 01:34 PM
|
#3
|
|
QmailToaster Developer
Registered: Dec 2005
Location: Burlington, NC
Distribution: CentOS, Voyage, Debian, Fedora
Posts: 220
Original Poster
Rep:
|
I'm sure it's because I'm not escaping something in there.... SO I tried this:
sed -e 's/$rcmail_config[\'default_host\'] = \'\'\;/$rcmail_config[\'default_host\'] = \'localhost\'\;/g' main.config
And that gives me a line like it's waiting for something else.
|
|
|
|
05-03-2007, 01:40 PM
|
#4
|
|
LQ Veteran
Registered: Sep 2003
Location: the Netherlands
Distribution: lfs, debian, rhel
Posts: 8,703
|
Hi,
If the line is always on line 38:
sed "38s/'';$/'localhost';/" infile
If it's not:
sed "s/\$rcmail_config\['default_host'\] = '';$/\$rcmail_config['default_host'] = 'localhost';/" infile
Hope this helps.
|
|
|
|
05-03-2007, 04:42 PM
|
#5
|
|
Senior Member
Registered: Jul 2004
Location: Germany
Distribution: open SUSE 11.0, Fedora 7 and Mandriva 2007
Posts: 1,638
Rep:
|
Druuna
Are you able to write those sed commands without looking at a book or some other material?
I know you are clever.
I must look at a book or online material to write sed and awk commands.
|
|
|
|
05-03-2007, 07:26 PM
|
#6
|
|
QmailToaster Developer
Registered: Dec 2005
Location: Burlington, NC
Distribution: CentOS, Voyage, Debian, Fedora
Posts: 220
Original Poster
Rep:
|
Quote:
|
Originally Posted by druuna
Hi,
If the line is always on line 38:
sed "38s/'';$/'localhost';/" infile
If it's not:
sed "s/\$rcmail_config\['default_host'\] = '';$/\$rcmail_config['default_host'] = 'localhost';/" infile
Hope this helps.
|
Grr.... Neither of those work either.
And yes, it will always be on line 38.
This did work, though:
perl -pi -e "s/''/'localhost'/" main.inc.php.dist
Thanks for all the help. The double quotes got me bumped in the right direction!
|
|
|
|
05-04-2007, 12:27 AM
|
#7
|
|
LQ Veteran
Registered: Sep 2003
Location: the Netherlands
Distribution: lfs, debian, rhel
Posts: 8,703
|
Hi,
perl, where did that come from? You asked for a sed solution
Maybe you just settled for perl. It's strange that the two examples given don't seem to work (you remember what went wrong?). I just tried both of them and here they do what they are supposed to do.
But, you have a working solution, thats all that matters in the end
@Gins: By now I don't need books/the net for this, but that's experience.
EDIT
@jakev383: You do know that the " after sed and before infile are double qoutes, not 2 single quotes? The '' after the / and before the ; are 2 single quotes.
/EDIT
Last edited by druuna; 05-04-2007 at 12:33 AM.
|
|
|
|
05-04-2007, 04:20 AM
|
#8
|
|
Senior Member
Registered: Jul 2004
Location: Germany
Distribution: open SUSE 11.0, Fedora 7 and Mandriva 2007
Posts: 1,638
Rep:
|
Druuna
When it comes to sed and awk, there are hundreds or rather thousands of commands. You should be a genius to know everything by heart. I am an idiot.
When it comes to 'grep' commands, there is a limit. I may be wrong.
|
|
|
|
05-05-2007, 05:40 AM
|
#9
|
|
QmailToaster Developer
Registered: Dec 2005
Location: Burlington, NC
Distribution: CentOS, Voyage, Debian, Fedora
Posts: 220
Original Poster
Rep:
|
Quote:
|
Originally Posted by druuna
Hi,
perl, where did that come from? You asked for a sed solution
Maybe you just settled for perl. It's strange that the two examples given don't seem to work (you remember what went wrong?). I just tried both of them and here they do what they are supposed to do.
But, you have a working solution, thats all that matters in the end
@Gins: By now I don't need books/the net for this, but that's experience.
EDIT
@jakev383: You do know that the " after sed and before infile are double qoutes, not 2 single quotes? The '' after the / and before the ; are 2 single quotes.
/EDIT
|
Where did perl come from? Once thing I've learned in Linux - it doesn't matter what you do or how you do it, as long as 2+2=4 in the end. If nothing else I think it's safe to say there's at least 3 ways of doing anything in Linux.
That being said, when I was doing a search-n-replace sed popped in my head. I couldn't get it to do what I wanted and after Gins bumped me with those double quotes, well, sed still didn't work but I thought "why not try perl?" since I was using it 5 lines prior in my little script anyway.
And yeah, I don't know why those don't work either. I ran them on a Cent4.4 machine which shouldn't matter but I've seen some weird things on Debian distros where /bin/sh wasn't linked to /bin/bash so scripts did funny things sometimes.
Thanks everyone!
|
|
|
|
| Thread Tools |
Search this Thread |
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -5. The time now is 04:36 PM.
|
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|