入力がファイルの場合でも、sedスクリプトの結果はデフォルトで標準出力となるが、代わりに入力ファイルに上書きしたいなら、--in-place
オプションを使う。バックアップを取ることもできる。
ファイル1行目 ファイル2行目 ファイル3行目
# 2行目削除
sed --in-place "2 d" FILE
すると、ファイルFILEの内容はこうなる。
ファイル1行目 ファイル3行目
ここでもし>
(リダイレクト)で入力ファイルに出力してしまうと、ファイルが空となってしまう。
sed "2 d" FILE > FILE
--in-place
オプションでファイル名語尾を指定することにより、元の入力ファイルをバックアップすることもできる。
ファイル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オプションオプションが指定された扱いになる)。
abc efg hij
あいうえお かきくけこ さしすせそ
sed --in-place='.backup' '2 d' FILE1 FILE2
上記はそれぞれのファイルの2行目が削除されるので、ファイル内容はこうなる。
abc hij
あいうえお さしすせそ
ここでもし--in-place
オプションがなければ、FILE1の2行目だけが削除される。