From: Thomas Pierce Date: 2008-02-18T23:35:26+09:00 Subject: Re: Help with Writing Replacement Text to Files Andy/Jeremy Thanks for the help! Jeremy, I ran your code snippet first with "w+" and it wiped the whole file. I then ran the code snippet Andy provided and it worked. I went back and used "r+" instead of "w+" in the code you provided Jeremy and it worked as well. I also appreciate the explanatory comments. Very helpful. Both code snippets work and provide me with exactly what I need. Thanks again. Hopefully as I move along I'll be able to be just as helpful on this list. Best Regards, ~Thomas On Feb 17, 2008, at 11:38 PM, Andy wrote: > Thomas, > > I'm new to Ruby (only a few days) but this is something I think I can > actually help you with. I had to do some searching and I came across > this website .. > http://pleac.sourceforge.net/pleac_ruby/fileaccess.html > > Search for 'Modifying a File in Place Without a Temporary File' and > you'll find the code. I'll paste it here though just to make it quick > and easy .. > > File.open('itest', 'r+') do |f| # open file for update > lines = f.readlines # read into array of lines > lines.each do |it| # modify lines > it.gsub!(/foo/, 'QQQ') > end > f.pos = 0 # back to start > f.print lines # write out modified lines > f.truncate(f.pos) # truncate to new length > end # file is automatically closed > > r+ is the mode that allows you to read and write to the file. I made > a text file named itest with this for content .. > > foo foo > bar bar > foo foo > > I ran that code and the file got changed to .. > > QQQ QQQ > bar bar > QQQ QQQ > > That's what you're looking for isn't it? I would suggest making a > backup of the files just in case there is a problem. If that isn't > what you were looking for I apologize, reply back to this and I'll try > again haha. > > -- > -Andy > "I have a great faith in fools; self-confidence my friends call it." – > Edgar Allen Poe > > On Feb 17, 2008 9:00 PM, Thomas Pierce > wrote: >> Hello! >> >> I'm new to ruby and been reading this very active list for about a >> couple of week. >> >> I have a project at work where I need to write a simple script to >> scrub IP addresses from configuration files for classified networks >> we >> work in sometimes. The goal is to cleanse configuration files >> sometimes required for support of any specific network addressing >> information. Here is what I've come up with so far. While this works >> in IRB on the file object I create, I cannot figure out how to write >> the changes back in place to the actual file itself back on the regex >> I'm using: >> >> config_file = File.open("config.txt") >> config_txt = config_file.read >> config_txt.gsub!(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/, >> "000.000.000.000") >> >> I do understand that the default action here is read-only. How to >> do I >> parse with the regex on the current file and replace matching strings >> without either appending to the file, overwriting the file, or >> creating a new file? >> >> Thanks! >> >> ~Thomas >> >> >