Adding and removing blocks of text from file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Adding and removing blocks of text from file
# 1  
Old 02-18-2014
Adding and removing blocks of text from file

Hello all,

short story: I'm writing a script to add and remove dns records in dns files. Its on a RHEL 5.5

So far i've locked up the basic operations in a couple of functions:

- validate the parameters
- search for existant ip in file when adding
- search for existant name records in file when adding
- duplicates
- backup the file
- restart dns service

The problem is the editing part.

Now to help me all the ip's i need to add or remove will be in a block of text

Code:
####Start
ip name_record
ip name_record
ip name_record
####End

right now too add a host i'm using:

Code:
 add_host () {
 sed -i "/####END/i $IP_ADDRESS\t$NAME_RECORD" $CONFIG_FILE
 }

and to remove a host i'm using:

Code:
remove_host () {
sed -i "/^$IP_ADDRESS\t$NAME_RECORD/d" $CONFIG_FILE
}

Looks like it is working but since this is gonna be production i'm just wondering if i'm not forgeting something or if there is something far more simpler, robust or just that editing directly the file is BAD and i should use a simple temp file and move it right after.

I'm just not that confident when dealing with operations between blocks of texts.

I'm also wondering if i should not add logs of operations, mail with the changes,etc

Thanks.
# 2  
Old 02-18-2014
Editing your originals is generally a bad idea... One mistake in your program and your config file will have been wiped out or mangled. If you use a template instead of editing the original, you can at least recover from that.
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 02-18-2014
Thanks for your answer

Even when backing up prior to any operations?

So pushing in a temp file and mv the file is the way to go?

Should i also do some type of checking on the temp file?

Code:
sed "/####END/i $IP_ADDRESS\t$NAME_RECORD" > $TEMP_FILE
#integrity check on temp file to make sure i can mv
[ -f $TEMP_FILE ] && mv $TEMP_FILE $CONFIG_FILE

# 4  
Old 02-18-2014
What happens when you do two in a row and discover that your backup's been mangled?
Quote:
Originally Posted by maverick72
So pushing in a temp file and mv the file is the way to go?
That's what sed -i and the like do anyway.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 02-18-2014
In this case I would run the editing script to produce a candidate file. I would visually scan the candidate file to make sure it is reasonable. Then I would move it into place and I would at least backup the previous file first. A better idea is to put these files under rcs control and do co and ci operations. That way you have a log of which admin made which change.

If you put a garbled file in place you run the risk that the named server will notice it and read it even before you do a manual "rndc reload". Then it can spit garbage out to the internet where it gets cached and will remain until the TTL expires.
This User Gave Thanks to Perderabo For This Post:
# 6  
Old 02-18-2014
I normally use this method
Code:
remove_host () {
cp -p $CONFIG_FILE $CONFIG_FILE.old &&
awk '$1!=ip' ip="$IP_ADDRESS" $CONFIG_FILE.old  > $CONFIG_FILE
}

Also avoids a theoretical problem with dots in a RE.
This User Gave Thanks to MadeInGermany For This Post:
# 7  
Old 02-19-2014
Thanks for all the answers. I've modified my script. Works great.

Perderabo: i tought about rcs but its an automated process from our vmware team so maybe i'll try to pitch the idea to them but seeing about 100 backup copies of the files (no backup dir, no cleanups, etc) i think its safe to say they are asking for trouble. I'm only here for a project not related and the asked me if i could write a script for them. Its internal DNS for testing network so doesn't go on the net Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to remove duplicate text blocks from a file?

Hi All I have a list of files which will have duplicate list of blocks of text. Following is a sample of the file, I have removed the sensitive information from the file. All the code samples starts from <TR BGCOLOR="white"> and Ends with IP address and two html tags like this. 10.14.22.22... (3 Replies)
Discussion started by: mahasona
3 Replies

2. Shell Programming and Scripting

Fixed with file- removing leading zeros and adding the space

Hi All, i have a fixed width file , where each line is 3200 length. File: 1ABC 1111 2222 3333 000012341 1001 2ABC 1111 2222 3333 000012342 1002 3ABC 1111 2222 3333 000112343 1003 1DEF 5555 4444 9696 000012344 1004 2DEF 5555 2323 8686 000012345 1005 3DEF 5555 1212 7676 000012346 1006 ... (1 Reply)
Discussion started by: mechvijays
1 Replies

3. Shell Programming and Scripting

Blocks of text in a file - extract when matches...

I sat down yesterday to write this script and have just realised that my methodology is broken........ In essense I have..... ----------------------------------------------------------------- (This line really is in the file) Service ID: 12345 ... (7 Replies)
Discussion started by: Bashingaway
7 Replies

4. Shell Programming and Scripting

how to split this file into blocks and then send these blocks as input to the tool called Yices?

Hello, I have a file like this: FILE.TXT: (define argc :: int) (assert ( > argc 1)) (assert ( = argc 1)) <check> # (define c :: float) (assert ( > c 0)) (assert ( = c 0)) <check> # now, i want to separate each block('#' is the delimeter), make them separate files, and then send them as... (5 Replies)
Discussion started by: paramad
5 Replies

5. Shell Programming and Scripting

[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. IN NS ns1.domain.tld. IN NS ns2.domain.tld. IN ... (2 Replies)
Discussion started by: cdn_humbucker
2 Replies

6. Shell Programming and Scripting

Removing blocks from a file

I have a file like the one below. Each record is separated with > In between I have lines consisting of 3 numeric values separated by a space. I need to take each block between the > sign and read the first number in the line. Then take the first after the > sign and the last before the >... (7 Replies)
Discussion started by: kristinu
7 Replies

7. Shell Programming and Scripting

How to read text in blocks

Hi, I have file which contains information written in blocks (every block is different). Is it possible to read every block one by one to another file (one block per file). The input is something like this <block1> <empty line> <block2> <empty line> ... ... ... <block25> <empty... (0 Replies)
Discussion started by: art84_)LV
0 Replies

8. Shell Programming and Scripting

extract blocks of text from a file

Hi, This is part of a large text file I need to separate out. I'd like some help to build a shell script that will extract the text between sets of dashed lines, write that to a new file using the whole or part of the first text string as the new file name, then move on to the next one and... (7 Replies)
Discussion started by: cajunfries
7 Replies

9. Shell Programming and Scripting

Adding specific text and spaces to each line in a text file

Hi, I wanted to add specific text to each row in a text file containing three rows. Example: 0 8 7 6 5 5 7 8 9 0 7 9 7 8 9 0 1 2 And I want to add a 21 at the beginning of the first row, and blank spaces at the beginning of the second two rows. To get this: 21 0 8 7 6 5 5 7 8... (4 Replies)
Discussion started by: hertingm
4 Replies

10. Shell Programming and Scripting

Delete blocks of lines from text file

Hello, Hello Firends, I have file like below. I want to remove selected blocks say abc,pqr,lst. how can i remove those blocks from file. zone abc { blah blah blah } zone xyz { blah blah blah } zone pqr { blah blah blah } (4 Replies)
Discussion started by: nrbhole
4 Replies
Login or Register to Ask a Question