sedコマンドでファイルを上書きしつつバックアップを残す方法
sedでテキスト置換する際、-iオプションを付けると、元ファイルを上書き更新することができる。いやー便利。
sed -i -e "s/hogehoge/fugafuga/g" hogehoge.txt
でも、「あ、しまった!間違えた!」なんてことが起こりうるので、置換するときにバックアップは必須ですよね。でもこれを手動でcpしてると面倒だし、うっかり取り忘れたりもしがち。
そんなときは、この-iオプションの後ろにバックアップファイル用のサフィックスを付けると、その名前で全部バックアップを取りつつ上書き更新してくれるのだ!
sed -i".bak" -e "s/hogehoge/fugafuga/g" hogehoge.txt
広告
sedコマンドの主なオプション
短いオプション | 長いオプション | 意味 |
---|---|---|
-r | –regexp-extended | スクリプトで拡張正規表現を使用する |
-e スクリプト | –expression=スクリプト | スクリプト(コマンド)を追加する |
-i | –in-place | ファイルを直接編集する |
-i拡張子 | –in-place=拡張子 | ファイルを直接編集し、指定した拡張子でバックアップする(※「-i」と「拡張子」の間には空白を入れない) |
実用例:findで検索した結果を置換する
find ./ -name "*.html" | xargs sed -i -e 's#https://hogehoge.jp/#https://fugafuga.jp/#g'
上記例は、html内に含まれるURLを移転先のものに置換している。URLのパスは/スラッシュが多くて、いちいちバックスラッシュを入れるのが煩わしいので、デリミタを#にしている。