Simpler Navigation for Servers and Operating Systems - Please Update Your Bookmarks
Completed: a much simpler Servers and Operating Systems section of the Community. We combined many of the older boards, so you won't have to click through so many levels to get at the information you need. Check the consolidated boards here as many sub-forums are now single boards.
If you have bookmarked forums or discussion boards in Servers and Operating Systems, we suggest you check and update them as needed.
cancel
Showing results for 
Search instead for 
Did you mean: 

Scripting Question

SOLVED
Go to solution
Michael Williams_6
Trusted Contributor

Scripting Question

Hello all (again, I swear I post more than anyone else on here!),

We're using SuSE here and the installation can be a little manual at time. Now most installs we use a Ghost image - so that's easy, but there are a couple of custom installs where we can't use Ghost and need to make lots of manual modifications to files that I'd like to automate.

Now, consider the /etc/profile file as a good example. My default one has the line:

test -z "$MAIL" && MAIL=/var/spool/mail/$USER

But I'd like that just to be (for backward compatibility in users' profiles):

MAIL=/var/spool/mail/$USER

Now I could achieve this in a script by:

sed -e 's/test -z "$MAIL" && MAIL=\/var\/spool\/mail\/$USER/MAIL=\/var\/spool\/mail\/$USER/' /etc/profile > /tmp/profile2; mv /tmp/profile2 /etc/profile

Which is a bit messy, and if I have multiple lines to modify in the file, then I'm going to a lot of file copying.

Can anyone suggest a simpler method to automate this? It would be nice if the file could be modified directly rather than having to use redirects...

Any ideas chaps?

Mike
2 REPLIES
Alexander Chuzhoy
Honored Contributor
Solution

Re: Scripting Question

perl -p -i.bak -w -e 's/change/replaced/g' filename

will replace each "change" string with "replaced" in file named "filename" and it will create a backup "filename.bak" in case something went wrong.
-p option tells perl to write a program
-i.bak stands for extension of a backup
-w turns on warnings
-e says that executable code follows.


Michael Williams_6
Trusted Contributor

Re: Scripting Question

My good man that's exactly what I'm looking for!

Works a treat!