Find and replace in file and overwrite file doesn't work, it empties the file
io-redirection, sed, shell, unix
Solution
When the shell sees `> index.html` in the command line it opens the file `index.html` for writing, wiping off all its previous contents.
To fix this you need to pass the `-i` option to `sed` to make the changes inline and create a backup of the original file before it does the changes in-place:
sed -i.bak s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
Without the .bak the command will fail on some platforms, such as Mac OSX.
Problem
I would like to run a find and replace on an HTML file through the command line. My command looks something like this: ``` sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html ``` When I run this and look at the file afterward, it is empty. It deleted the contents of my file. When I run this after restoring the file again: ``` sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html ``` The `stdout` is the contents of the file, and the find and replace has been executed. Why is this happening?