Text substitution (reading from file and saving to the same file) on linux with sed

Viewed 36165

I want to read the file "teste", make some "find&replace" and overwrite "teste" with the results. The closer i got till now is:

$cat teste
I have to find something
This is hard to find...
Find it wright now!

$sed -n 's/find/replace/w teste1' teste

$cat teste1
I have to replace something
This is hard to replace...

If I try to save to the same file like this:

$sed -n 's/find/replace/w teste' teste

or:

$sed -n 's/find/replace/' teste > teste

The result will be a blank file...

I know I am missing something very stupid but any help will be welcome.


UPDATE: Based on the tips given by the folks and this link: http://idolinux.blogspot.com/2008/08/sed-in-place-edit.html here's my updated code:

sed -i -e 's/find/replace/g' teste 
7 Answers

There is a useful sponge command.

sponge soaks up all its input before opening the output file.

$cat test.txt | sed 's/find/replace/w' | sponge test.txt
Related