Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace text in text file using bat file script?

So I want to create a script that takes 3 arguments: path to file, exact word to replace, and with what to replace it. How to create such thing?

Generally I want it to have an API like this:

script.bat "C:/myTextDoc.xml" "_WORD_TO_REPLACE_" "WordTo Use"
like image 331
Rella Avatar asked Mar 29 '11 18:03

Rella


People also ask

How do I replace data in a text file?

1) Copy all the text up to the start of the line before which you want to insert the new line from the old file to the new file. 2) Write your new text to the new file, with a newline character at the end. 3) Copy all the text up to the end of the file from the old file to the new file. 4) Close both files.

How do you change the content of a file using batch file?

There are no batch file methods to change the content of a file. You can however, analyze each line of a file one at a time, and send each line to a new file (modifying the desired line when you come to it). Then, once you've created the modified file, you can replace the original file with the modified file.

How do I replace text in a file in bash?

To replace content in a file, you must search for the particular file string. The 'sed' command is used to replace any string in a file using a bash script. This command can be used in various ways to replace the content of a file in bash. The 'awk' command can also be used to replace the string in a file.

How do you replace a word in a script?

To find and replace strings in a script: Choose Search | Replace, or press CTRL+R. The Replace With dialog box appears. The last used strings are displayed in the Text to find and Replace with boxes.


2 Answers

I have written something like 2 batch scripts in my life, but here's how to take input from the command line:

script.bat filepath find replace
%1 = filepath, %2 = find, %3 = replace

To do replacement, do something like:

for /f "tokens=1,* delims=]" %%A in ('"type %1|find /n /v """') do (
set "line=%%B"
if defined line (
    call set "line=echo.%%line:%~2=%~3%%"
    for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
    ) ELSE echo.
)

(taken directly from the link posted by @russ, with the variable numbers changed.)

I think this should work for you.

like image 110
rockerest Avatar answered Sep 21 '22 03:09

rockerest


Use fnr utility its better than other famous utility since it can search and replace based on regular expressions. Also for the UI lovers you can configure options in UI and it can generate command line string which can then be used in your script. Very easy to use even as command line stirng.

Find it here http://findandreplace.codeplex.com/

Also it is single exe without any dependicies, so easy to use.

Example:

fnr --cl --dir "" --fileMask "hibernate.*" --useRegEx 
      --find "find_str_expression" --replace "replace_string"
like image 20
Aman Avatar answered Sep 19 '22 03:09

Aman