Bash

我可以在 Linux 中讀取和寫入同一個文件而不覆蓋它嗎?

  • April 11, 2012

可能重複:

如何使 iconv 用轉換後的輸出替換輸入文件?

我經常使用他們的公共DNS名稱
ec2-12-34-56-78.compute-1.amazonaws.com``known_hosts``ec2

我知道我可能可以sed -i用來編輯,但我想使用grep,所以我這樣做了:

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts

留下known_hosts一個空文件。如果我做:

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts

那麼一切都很好,但是我很困惑為什麼讀取和寫入同一個文件會使其空白,以及在使用 , 等時是否有任何解決grep方法cat

有一個名為的實用程序spongemoreutils套件的一部分。它正是為此目的而製作的。

grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts

重定向由 shell 在命令執行之前完成。這意味著 shell 被告知在grep有機會讀取文件之前截斷文件。如果您使用 shell 重定向,則無法解決此問題。

引用自:https://unix.stackexchange.com/questions/36261