Solved

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

Posted on 2008-10-28
10
275 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
  • 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
 
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
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This is the error message I got (CODE) Error caused by incompatible libmp3lame 3.98-2 with ffmpeg I've googled this error message and found out sometimes it attaches this note "can be treated with downgrade libmp3lame to version 3.97 or 3.98" …
Note: for this to work properly you need to use a Cross-Over network cable. 1. Connect both servers S1 and S2 on the second network slots respectively. Note that you can use the 1st slots but usually these would be occupied by the Service Provide…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…

708 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now