連線檔案

眾所周知,你不能在同一命令中使用相同的檔案進行輸入和輸出。例如,

$ cat header.txt body.txt >body.txt

不做你想做的事。當 cat 讀取 body.txt 時,它已經被重定向截斷並且它是空的。最終的結果是 body.txt 只能儲存 header.txt 的內容*。*

人們可能會想到通過程序替換來避免這種情況,即命令

$ cat header.txt <(cat body.txt) > body.txt

在檔案被重定向截斷之前,會強制 body.txt 的原始內容以某種方式儲存在某個緩衝區中。它不起作用。括號中的 cat 僅在設定了所有檔案描述符後才開始讀取檔案,就像外部檔案描述符一樣。在這種情況下嘗試使用程序替換沒有意義。

將檔案新增到另一個檔案的唯一方法是建立一箇中間檔案:

$ cat header.txt body.txt >body.txt.new
$ mv body.txt.new body.txt

當使用“ 就地編輯” 選項(通常是 -i) 呼叫時,sedperl 或類似程式在地毯下執行的操作。