ファイル上書き--in-placeオプション

入力がファイルの場合でも、sedスクリプトの結果はデフォルトで標準出力となるが、代わりに入力ファイルに上書きしたいなら、--in-placeオプションを使う。バックアップを取ることもできる。


    標準出力の代わりに入力ファイルに上書き

    FILE

    ファイル1行目
    ファイル2行目
    ファイル3行目
    # 2行目削除
    sed --in-place "2 d" FILE
    

    すると、ファイルFILEの内容はこうなる。

    ファイル1行目
    ファイル3行目

    ここでもし>(リダイレクト)で入力ファイルに出力してしまうと、ファイルが空となってしまう。

    sed "2 d" FILE > FILE

    バックアップ

    --in-placeオプションでファイル名語尾を指定することにより、元の入力ファイルをバックアップすることもできる。

    FILE

    ファイル1行目
    ファイル2行目
    ファイル3行目
    # 2行目削除
    sed --in-place='.backup' '2 d' FILE
    

    上記により、FILEの元の内容が「FILE.backup」という名前でバックアップされ、一方のFILEの内容はこうなる。

    ファイル1行目
    ファイル3行目

    下記のように*を使うと、その部分が元のファイル名として扱われ、バックアップファイル名は「backup.FILE」になる。

    sed --in-place='backup.*' '2 d' FILE

    入力ファイルが複数のときの上書き

    --in-placeオプションにおいては、入力ファイルが複数のときも、別々に処理されたものとして上書きされる。(通常ならば二つ目のファイルの行数カウントはリセットされずに合算されるが、--separateオプションオプションが指定された扱いになる)。

    FILE1

    abc
    efg
    hij

    FILE2

    あいうえお
    かきくけこ
    さしすせそ
    sed --in-place='.backup' '2 d' FILE1 FILE2

    上記はそれぞれのファイルの2行目が削除されるので、ファイル内容はこうなる。

    FILE1

    abc
    hij

    FILE2

    あいうえお
    さしすせそ

    ここでもし--in-placeオプションがなければ、FILE1の2行目だけが削除される。