Text-Processing

sort 是否支持就地排序文件,例如sed --in-place

  • May 17, 2021

我是盲人還是沒有像--in-placefor那樣的選擇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

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