sedコマンドを使ってファイルパスを置換する方法

区切り文字を変えてsedコマンドでファイルパスを置換してみた

こんにちは。そろそろ梅雨が終わってもいいのではないかと思っています。カラッとした天気を待ち望んでいるヤマオカです。

本日はsedコマンドを使ってファイルのパスを置換する方法を紹介していきます。

今回お伝えする理由

先日wpの移行作業があり、その際にsedコマンドを使いパスを置換する必要が出てきました。そのwp移動作業の時にはデータの調整を行う必要があったのです。(ドメインを変えた場合)

理由としては、移動データ内のurl(パス)が移行前のドメインのままに残るからです。その時に置換プラグインを利用して置換を行いました。置換にはSearch Regexというプラグインを利用したのですが、それだけでは置換しきれないものがあったので、サーバに入りコマンドを打って置換を行いました。

パスには{スラッシュ/}が入っていますが、sedコマンドを利用する際には{スラッシュ/}が区切り文字となっているので、ここで問題が発生したわけです。そこでどのようにしてパスをsedコマンドを使い、置換したのかを調べることとなったので、共有します。

sedコマンド

sedコマンドは、指定したファイルをコマンドに従って処理し、標準出力へ出力します。
そして文字列の抽出、変換、削除などを行うことができるコマンドです。

sedコマンド主に利用されるオプション

短いオプション 長いオプション 意味
-e --expression 指定したスクリプトで置換を行う
-f --file 指定したファイルに記述されているスクリプトファイルの内容を追加
-r --regexp スクリプトで拡張正規表現を使用する
-i --in ファイルを直接編集する

これらのオプションはよく利用します。これ以外にもあるので必要に応じて確認してみてください。

区切りの文字はスラッシュでないといけないのか

さて、本題です。urlなどを置換した場合に{/スラッシュ}はどうするのか?

区切りの文字としてスラッシュ以外を使ってはいけないのかについてですが、別の文字をスラッシュの代わりに利用してsedコマンドを活用することができます。

スラッシュ以外で使える区切りの文字

  • @
  • #
  • %
  • !

上記の文字でスラッシュの代わりの区切り文字として利用することができます。

スラッシュ以外を区切りの文字で使ったコマンド例

sed -i -e s%hogehoge.ad.jp/hoge%blog.hoge.co.jp%g *html

上記の表現では%を区切り文字として利用してみました。
hogehoge.ad.jp/hoge というパスを、blog.hoge.co.jpに置換しています。

このようにしてファイルパスなどスラッシュが入ったものでもsedコマンドを打つことができます。
%のところを@!等に変えて利用していただくことも可能です。

まとめ

今回はsedコマンドを使ってファイルパスを置換する方法を紹介しました。区切り文字はスラッシュだけでなく色々使えたので使ってみてはいかがでしょうか?