Search and replace text in files


#1

I need to search a file for text “InstallDir=” + newline character and
replace it with something like: InstallDir=C:\mws71 + newline

My own experimentation with this had problems with writing the back-
slashes to the file (it’s a requirement of the format to have the back-
slashes as in my example). The string had the back-slashes in it but
they didn’t get persisted to the file correctly.

Are there any libraries that perform a search and replace?

thanks
phil


#2

Phil S. wrote:

I need to search a file for text “InstallDir=” + newline character and
replace it with something like: InstallDir=C:\mws71 + newline

“InstallDir=\n”.gsub /(InstallDir=)(\n)/, ‘\1C:\mws71\2’
=> “InstallDir=C\:\mws71\n”

My own experimentation with this had problems with writing the back-
slashes to the file (it’s a requirement of the format to have the back-
slashes as in my example). The string had the back-slashes in it but
they didn’t get persisted to the file correctly.

In a single-quoted string, one backslash outputs one backslash.
In a double-quoted string, two backslashes outputs one backslash.

'\ ’
=> "\ "

"\ "
=> "\ "

Are there any libraries that perform a search and replace?

String#gsub


#3

On Fri, May 04, 2007 at 03:16:37AM +0900, Suraj K. wrote:

they didn’t get persisted to the file correctly.

In a single-quoted string, one backslash outputs one backslash.

Except where followed by a single quote or another backslash.

irb(main):001:0> ‘\’.length
=> 1
irb(main):002:0> ‘’’.length
=> 1
irb(main):003:0> ‘\n’.length
=> 2


#4

Are there any libraries that perform a search and replace?

String#gsub

I meant on a file… I was looking for something like
File.search_and_replace(file_name, regex_search, replace_string)

But I guess I can simply pull a file into a string and then do a gsub
and write the file out.

Thanks,
phil