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のパスは/スラッシュが多くて、いちいちバックスラッシュを入れるのが煩わしいので、デリミタを#にしている。

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *