Linuxコマンド

sedコマンドでファイルを編集して上書き保存する

更新日:

sedでファイルを上書き保存するには-iオプションを使う

最初に正解から。sedコマンドで読み込んだファイルを編集して同じファイルに上書きするには次のように-iオプションを使う。

$ sed -i 's/hoge/foo/g' infile

これでinfileから読み込んで、sedで処理した結果をinfileに上書き保存する。

よくある間違いは読み込んだファイルにリダイレクトして上書きしようとすることだ。

$ sed 's/hoge/hoo/g' infile > infile

これだとファイルが空になってしまう。

もちろん読み込んだファイルとは異なるファイルへリダイレクトすることは正しい処理だ。

$ sed 's/hoge/hoo/g' infile > otherfile

-iの後に(間にスペースを挟まないで)拡張子の文字列を追加すると、その拡張子をサフィックスとして変更前のバックアップを取ることがでる。

$ sed -i'.orig' 's/hoge/foo/g' infile
$ ls infile*
infile  infile.orig

ちなみに、この-iオプションは日本語のmanページには(内容が古いせいか)載っていないことがある。そのが場合は英語のmanページを見る必要がある。日本語環境で英語のmanページを表示させるには次のように実行する。

$ LANG=C man sed

これはLANG環境変数にCを設定してからコマンド(ここではman)を実行する。LANGへの設定は後続のコマンドの実行時だけ有効になる。日本語のmanページをみて-iオプションは使えないと早合点をしないようにしよう。

最後までお読みいただきありがとうございます。

-Linuxコマンド

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.