sort 是否支持就地排序文件,例如sed --in-place
?
我是盲人還是沒有像
--in-place
for那樣的選擇sort
?為了將結果保存到輸入文件,sed 使用
-i
(--in-place
)。將輸出重定向
sort
到輸入文件sort < f > f
導致它為空。如果沒有
--in-place
選擇 - 也許有一些技巧可以方便地做到這一點?(我想到的唯一一件事:
sort < f > /tmp/f$$ ; cat /tmp/f$$ > f ; rm /tmp/f$$
移動不是正確的選擇,因為可能會更改*文件權限。*這就是我用臨時文件的內容覆蓋然後刪除的原因。)
sort
具有將文件名作為參數的-o
(or--output
) 選項。程序將數據寫入臨時文件,然後在排序完成後覆蓋原始輸入文件(只有在讀取所有輸入數據後才會發生這種情況)。(這與實際操作基本相同sed -i
。)從
GNU sort
資訊頁面:
**-o** *OUTPUT-FILE* **--output=***OUTPUT-FILE*
將輸出寫入OUTPUT-FILE而不是標準輸出。通常, 在打開OUTPUT-FILEsort
之前讀取所有輸入,因此您可以使用 和之類的命令安全地對文件進行排序。但是,with ( ) 可以在讀取所有輸入之前打開輸出文件,因此類似這樣的命令並不安全,因為可能在讀取完成之前開始寫入。sort -o F F``cat F | sort -o F``sort``--merge``-m``cat F | sort -m -o F - G``sort``F``cat
在較新的系統上,如果設置了輸入文件,-o
則不能出現在輸入文件之後 ,例如. 可移植腳本應 在任何輸入文件之前指定。POSIXLY_CORRECT``sort F -o F``-o *OUTPUT-FILE*
以及來自The Open Group Base Specification 第 7 期:
**-o** *output*
指定要使用的輸出文件的名稱,而不是標準輸出。該文件可以與輸入文件之一相同。 如果您的磁碟空間不足或磁碟配額不足,或者係統在寫入輸出文件時崩潰,或者發生其他錯誤,則有報告
sort
可能會丟棄(即銷毀)您的部分或全部數據。sort
簡而言之,要對文件進行就地排序,可以使用以下方法:sort -o filename filename