Solved

Would like to search and replace specific string in file in one directory (linux)

Posted on 2008-10-28
10
285 Views
Last Modified: 2013-12-16
Hi,

I would like to request an assistant.

May i know how to create a script to search and replace a few string in a file ?

Attached is the dns zone file in which i would like to do the following :

1. search all files in a directory ended with ".db" and replace all string "600" to "14400"
2. After that replacing the specific string below :

From :

                600             ; refresh, seconds
                600             ; retry, seconds
                600             ; expire, seconds
                600 )           ; minimum, seconds

to :

      86400            ; refresh, seconds
      7200            ; retry, seconds
      3600000            ; expire, seconds
      86400 )            ; minimum, seconds


The location of the files is in "/var/named"
The filename will end with ".db" eg: domainname.com.db"

Appreciates if anybody can help me on this.


P/S : the reason i need to replace the "600" in my STEP 1 is to replace the string that are not specific above.


Thank you,

Regards,
Sham
; cPanel 11.18.1-CURRENT_21558
; Zone file for domainname.com
$TTL 600
@      600      IN      SOA     dns60.hostingcompany.com. report.hostingcompany.com. (
                2008041401      ; serial, todays date+todays
                600             ; refresh, seconds
                600             ; retry, seconds
                600             ; expire, seconds
                600 )           ; minimum, seconds
 
domainname.com. 600 IN NS dns60.hostingcompany.com.
domainname.com. 600 IN NS dns61.hostingcompany.com.
 
domainname.com. IN A 124.217.243.160
 
localhost.domainnamecom. IN A 127.0.0.1
 
domainname.com. IN MX 0 domainname.com.
 
mail IN CNAME domainname.com.
www IN CNAME domainname.com.
ftp IN CNAME domainname.com.

Open in new window

0
Comment
Question by:smksa
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
10 Comments
 
LVL 48

Expert Comment

by:Tintin
ID: 22828670

#!/bin/bash
for db in $(find /var/named -name "*.db)
do
  sed -i.bak -e "s/600.*refresh, seconds/86400    ;refresh, seconds/" \
    -e "s/600.*retry, seconds/7200      ;retry, seconds/" \
    -e "s/600.*expire, seconds/3600000  ;expire, seconds/" \
    -e "s/600.*minimum, seconds/86400   ;expire, seconds/" $db
done

Open in new window

0
 
LVL 2

Author Comment

by:smksa
ID: 22828688
Hi,

Thanks TinTin,

But how about my Step 1 in which i would like all string of 600 to be changed to 14400 first before the specific string as you given above.

Thank you,

Regards,
Sham
0
 
LVL 48

Accepted Solution

by:
Tintin earned 500 total points
ID: 22828721
What's the purpose of Step 1?  Do you want to end up with

@TTL 14440
domainname.com. 14400 IN NS dns60.hostingcompany.com.
domainname.com. 14400 IN NS dns61.hostingcompany.com.

if so, then change the script to



#!/bin/bash
for db in $(find /var/named -name "*.db)
do
  sed -i.bak -e "s/600/14400/" \
    -e "s/14400.*refresh, seconds/86400    ;refresh, seconds/" \
    -e "s/14400.*retry, seconds/7200      ;retry, seconds/" \
    -e "s/14400.*expire, seconds/3600000  ;expire, seconds/" \
    -e "s/14400.*minimum, seconds/86400   ;expire, seconds/" $db
done

Open in new window

0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 2

Author Comment

by:smksa
ID: 22828749
Hi TinTin,

Thanks ...

But i received the following error message :

root@svr8 [/]# ./changettl.sh
./changettl.sh: line 8: unexpected EOF while looking for matching `"'
./changettl.sh: line 10: syntax error: unexpected end of file
0
 
LVL 48

Expert Comment

by:Tintin
ID: 22828763
if you got those errors, you must have copy/pasted the script I gave you incorrectly.

Please check again, or copy/paste the version you are using here.
0
 
LVL 2

Author Comment

by:smksa
ID: 22828777
Hi,

Attached is the exact copy of the script ...

Can you help to check where went wrong ?

Thanks..
#!/bin/bash
for db in $(find /var/named -name "*.db)
do
  sed -i.bak -e "s/600/14400/" \
    -e "s/14400.*refresh, seconds/86400    ;refresh, seconds/" \
    -e "s/14400.*retry, seconds/7200      ;retry, seconds/" \
    -e "s/14400.*expire, seconds/3600000  ;expire, seconds/" \
    -e "s/14400.*minimum, seconds/86400   ;expire, seconds/" $db
done

Open in new window

0
 
LVL 48

Expert Comment

by:Tintin
ID: 22828834
Sorry, my mistake

for db in $(find /var/named -name "*.db)

should be

for db in $(find /var/named -name "*.db")
0
 
LVL 2

Author Comment

by:smksa
ID: 22828900
Hi,

It seems there are a mistake in the scripts...

FYI, the last part "86400   ;expire, seconds" should be "86400   ) ;minimum, seconds"

you missed the ")" ,

I have runned the script but not yet restart the dns ...

May i know how to move all .db.bak file back to .db ?

Thank you.

Regards,
Sham.



0
 
LVL 48

Expert Comment

by:Tintin
ID: 22828973
To revert all .bak files, do


for db in $(find /var/named -name "*.bak")
do
  mv $db ${db%%.bak}
done

Open in new window

0
 
LVL 2

Author Closing Comment

by:smksa
ID: 31511054
Thanks for helping
0

Featured Post

The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
how to print sub line with  sed /awk /perl in bash file 11 69
postfix start error! 9 57
Ubuntu don’t allow SU command in terminal 7 69
Linux 3 38
Setting up Secure Ubuntu server on VMware 1.      Insert the Ubuntu Server distribution CD or attach the ISO of the CD which is in the “Datastore”. Note that it is important to install the x64 edition on servers, not the X86 editions. 2.      Power on th…
I. Introduction There's an interesting discussion going on now in an Experts Exchange Group — Attachments with no extension (http://www.experts-exchange.com/discussions/210281/Attachments-with-no-extension.html). This reminded me of questions tha…
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question