Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Search Forums:



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 03-06-2010
Registered User
 

Join Date: Mar 2010
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
[bash help]Adding multiple lines of text into a specific spot into a text file

I am attempting to insert multiple lines of text into a specific place in a text file based on the lines above or below it.

For example, Here is a portion of a zone file.

Code:
                IN      NS      ns1.domain.tld.
                IN      NS      ns2.domain.tld.
                IN      NS      ns3.domain.tld.
                IN      NS      ns4.domain.tld.

        IN    A    255.255.255.255

I need to add 4 lines of MX records in between the final NS record and the first A record, and still leave 1 line of white space between each, so that it looks like this:

Code:
                IN      NS      ns1.domain.tld.
                IN      NS      ns2.domain.tld.
                IN      NS      ns3.domain.tld.
                IN      NS      ns4.domain.tld.

                 IN      MX      mx1.domain.tld.
                 IN      MX      mx2.domain.tld.
                 IN      MX      mx3.domain.tld.
                 IN      MX      mx4.domain.tld.

        IN    A    255.255.255.255

I've checked the other posts which have to do with inserting text into a file, and it seems like this can be done with some iteration of sed, but I'm not sure where to begin. the other examples of this kind of situation on this forum seemed to be dealing mostly with specific line numbers, or a static value to insert the line after. Where in this situation, the final NS record will change, and the amount of NS lines will change from zone file to zone file, so the only static value is the IN NS.

any help anyone can offer with this is greatly appriciated.
Sponsored Links
    #2  
Old 03-06-2010
dennis.jacob's Avatar
Registered User
 

Join Date: Feb 2007
Location: Singapore/Cochin
Posts: 871
Thanks: 0
Thanked 10 Times in 9 Posts
Try:

input:

Code:
cat file1
                IN      NS      ns1.domain.tld.
                IN      NS      ns2.domain.tld.
                IN      NS      ns3.domain.tld.
                IN      NS      ns4.domain.tld.

        IN    A    255.255.255.255
cat file2
                 IN      MX      mx1.domain.tld.
                 IN      MX      mx2.domain.tld.
                 IN      MX      mx3.domain.tld.
                 IN      MX      mx4.domain.tld.

Code:

Code:
awk '{ if(/A.+[0-9]+/) {_s=$0;next;} print;}END { print "\n" _s; }'  file1 file2
                IN      NS      ns1.domain.tld.
                IN      NS      ns2.domain.tld.
                IN      NS      ns3.domain.tld.
                IN      NS      ns4.domain.tld.

                 IN      MX      mx1.domain.tld.
                 IN      MX      mx2.domain.tld.
                 IN      MX      mx3.domain.tld.
                 IN      MX      mx4.domain.tld.

        IN    A    255.255.255.255

Sponsored Links
    #3  
Old 03-06-2010
karthigayan's Avatar
Registered User
 

Join Date: Apr 2009
Location: India , Chennai
Posts: 137
Thanks: 0
Thanked 3 Times in 3 Posts
You can have the text to be insert in a file.Here I had the main file as "file1" and had the text in the file "file2".

file1:

Code:
  
                IN      NS      ns1.domain.tld.
                IN      NS      ns2.domain.tld.
                IN      NS      ns3.domain.tld.
                IN      NS      ns4.domain.tld.

                IN    A    255.255.255.255

file2:

Code:
                 IN      MX      mx1.domain.tld.
                 IN      MX      mx2.domain.tld.
                 IN      MX      mx3.domain.tld.
                 IN      MX      mx4.domain.tld.



Code:
str=""
while read line
do
        str="$str$line\n"
done < "file2"

while read line
do
        match=`sed -r "s/(^ *IN +A.+$)/$str\n\1\n/g" <<<"$line"`
        echo -e "$match" >>resultfile
done < "file1"

Here the result will store on the file resultfile
Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Adding text to file on certain lines with(special characters) A4ron4perl Shell Programming and Scripting 13 12-16-2009 10:12 PM
extract the lines between specific line number from a text file return_user Shell Programming and Scripting 1 07-18-2009 09:11 PM
Adding specific text and spaces to each line in a text file hertingm Shell Programming and Scripting 4 08-25-2008 02:34 PM
adding text to a file between lines bishweshwar Shell Programming and Scripting 7 10-10-2006 01:03 PM
Delete specific lines in a text file dniz Programming 9 08-08-2005 08:30 AM



All times are GMT -4. The time now is 12:53 AM.