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?
When the shell sees
> index.htmlin the command line it opens the fileindex.htmlfor writing, wiping off all its previous contents.To fix this you need to pass the
-ioption tosedto make the changes inline and create a backup of the original file before it does the changes in-place:Without the .bak the command will fail on some platforms, such as Mac OSX.