sedを中断するとターゲットファイルが破損しますか?

sedを中断するとターゲットファイルが破損しますか?

もし私が邪魔する sed(ストリームエディタ)あなたはチャンスがありますか?腐敗ターゲットファイル?

はい:コマンドを実行しsed -i -- 's/foo/bar/g' file.txtて終了する前に終了すると、文字列がターゲットfooファイル以外のテキストに置き換えられるか、barターゲットファイルが破損する可能性がありますか?

私は何をしますか?予想されるはい、ファイルハンドラの前に殺すとフラッシュ、ファイルに完了していない代替エントリがある可能性があります。しかし、私はsedそのような気がします。強いこれらのイベントの場合は、修正前にある種の中間ファイルを使用してターゲット。ただし、ドキュメントに詳細がありません。

ベストアンサー1

sed マニュアルで...

https://www.gnu.org/software/sed/manual/sed.html

ファイルの終わりに達すると、一時ファイルの名前が出力ファイルの元の名前に変更されます。

-i[SUFFIX]
--in-place[=SUFFIX]
This option specifies that files are to be edited in-place. GNU sed does this by creating a temporary file and sending output to this file rather than to the standard output.1.
This option implies -s.

When the end of the file is reached, the temporary file is renamed to the output file's original name. The extension, if supplied, is used to modify the name of the old file before renaming the temporary file, thereby making a backup copy2).

This rule is followed: if the extension doesn't contain a *, then it is appended to the end of the current filename as a suffix; if the extension does contain one or more * characters, then each asterisk is replaced with the current filename. This allows you to add a prefix to the backup file, instead of (or in addition to) a suffix, or even to place backup copies of the original files into another directory (provided the directory already exists).

If no extension is supplied, the original file is overwritten without making a backup. 

おすすめ記事