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.html
in the command line it opens the fileindex.html
for writing, wiping off all its previous contents.To fix this you need to pass the
-i
option tosed
to 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.