macでのファイル内文字列置き換え

2016年6月27日

diary mac web/computer

WordPressのようなCMSを使っていない、lisianthus.me.ukみたいなサイトで面倒なのは、ブログの移転などでリンク先を変更すること。
Text WranglerとかJeditXとかmac用にも幾つかあるらしいけど、出来る限りソフトを使いたくない。とは言えグローバルナビにもdiaryとして設置しているので修正は全190ファイル(ss=127,game=58,gn=5)にも及ぶので、手打ちで修正なんてしてられない。と、そんな時に便利なターミナル。
備忘録的に書いておこうと思う。

まあ、それほど大袈裟なことをやっている訳じゃなくてgrepとsedを使うだけ。
winからmacに移行して、フリーソフトの少なさに愕然としてどうしたらいいのかわからない人も、もしかしたらいるかも知れないので手順を全て書くと、
  1. ターミナルを起動
  2. ディレクトリ移動して修正したいファイルのある場所へ
  3. 念のためちゃんとした場所にいるか確認
  4. grepとsedで文字列検索して置き換え
やることはこれだけです。
具体的に説明すると、

1. アプリケーション→ユーティリティ→ターミナル
まあ、これは説明する必要ないかな。

2. ディレクトリ移動
winでコマンド打つのと対して変わりません。
多分、ターミナル起動時は「iMac:〜 user$」のようになっていると思いますが、これはiMacのuserディレクトリにいるよ、ということ。
※winに慣れている人なら「フォルダ」と言った方がわかりやすいかも。

ここから、修正したいファイルがある場所に移動します。
できればuser直下にフォルダ作って、その中に修正ファイルをコピーしておくと面倒がなくて良いかも。
user → repというフォルダを作ってその中に入れておいたとしたら、

cd repと打ってreturnを押すと、「user$」の前の文字が変わると思います。
例えば「iMac:~ user$」だったのが「iMac:rep user$」みたいに。

上のディレクトリ(この場合ならuser)に移動する場合はcd ..と打てばいいです。
cdはchange directoryでディレクトリ移動するよ、という命令です。..はhtml書いてる人ならお馴染みですよね。相対パス書く時に使うと思います。

3. 念のため存在しているファイル名を確認
大丈夫だとは思いますが念のために今いる場所に置き換えしたいファイルがあるか、正しい場所にいるかを確認します。
lsと打てば今いる場所にあるファイル名が一覧で表示されますので、確認して下さい。

4. htmlファイル内の文字列を置き換え

grep -lr '検索文字列' * | xargs sed -i "" -e 's/検索文字列/置換文字列/g'

上記のコードを入力すると、カレントディレクトリのファイル内を検索して、検索文字列を置換文字列に変えてくれます。
今回のブログのアドレス変更だったら、

grep -lr 'lisianthus.blog.jp' * | xargs sed -i "" -e 's/lisianthus.blog.jp/diary-lisianthus.blogspot.jp/g'

と打ってreturn、これで置き換えられます。
正直なところ、macでフリーソフトを探すのはwinに比べて数が少なく相当に面倒なのでコマンドでやってしまう方法を探す方が楽です。

バックアップファイルを取っておきたい、あるいはディレクトリ内の特定の拡張子だけ指定したいという方は……ん?どうするんだろう?まあいいや、面倒だからググって下さい。