How can I use a file in a command and redirect output to the same file without truncating it?

mike picture mike · Jul 14, 2011 · Viewed 48.2k times · Source

Basically I want to take as input text from a file, remove a line from that file, and send the output back to the same file. Something along these lines if that makes it any clearer.

grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > file_name

however, when I do this I end up with a blank file. Any thoughts?

Answer

Lynch picture Lynch · Jul 14, 2011

Use sponge for this kind of tasks. Its part of moreutils.

Try this command:

 grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name | sponge file_name