Hacker News new | past | comments | ask | show | jobs | submit login

The purpose of sponge is that you can do this:

grep foo file.txt | sponge file.txt

If you do this with redirections then file.txt will be truncated before it's been processed, leaving you with an empty file instead of what you wanted. Sponge collects its input first and then writes everything out at the end, so you can output to a file that was used as an input.

(Parent updated while I was writing. Oh well)




That doesn't seem like an efficient way to do it.

Commands that process file in place (sed -i) write to a temporary file in the same filesystem and then rename to the target file, which works if you want to process files that don't fit into memory.


I apologise, I was speaking loosely. I don't know if sponge collects input in memory or in a file. (Frankly I've never needed to care since the files I've ever needed this tool for have all been small)


Without inspecting the implementation of `sponge` that's how I assumed it already internally worked.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: