Skyland Ventures tech ブログ

渋谷のVenture Capital Skyland Venturesのいま一番イケてる投資先、nanameue,IncとKaumoの共同技術ブログ

複数ファイルの一括リネーム!! ~エンジニアインターン生がターミナルで遊んでみる~ の続き!

nanameue, Inc. でインターンしています 横田です。

前回の複数ファイルの一括リネーム!! ~エンジニアインターン生がターミナルで遊んでみる~の続きを書こうと思います。

前回の内容

for i in ./AA*;do mv -- "$i" "${i/AA/BB}";done

上ののコマンドで現在いるカレントディレクトリにある全てのファイルの頭文字を

AA -> BB

に変えました。

f:id:skytechblog:20151216032444p:plain


よしこれでプロジェクトを開始だ!ガンガン、コードを書いていくぞ!!まずはBBViewController.m から始めていこう!

そこでBBViewController.mを開けてみると….

f:id:skytechblog:20151216032512p:plain

AAが残っている!!!

考えてみれば当たり前なんですが、画像ファイルや音楽ファイルとちがってソースコードにはファイルの中に記述があります。前回のコマンドでファイル名を変えただけでは中身は変わらずそのままです。

しかも見てわかるようにコードの中の方がAAという文字列を使われてる回数が多い!上のすべてのファイルがBBViewController.mのようにAAという部分文字列があったら単純計算して22 x 8 = 176 回以上 変更しなければいけない...

はい、もうこれは人間がやることではありません。

このディレクトリ内のすべてのファイルの中の

AA -> BB

に変えるために、ターミナルでBBディレクトリまでいってこのコマンドを叩きましょう!

sed -i -e ’s/AA/BB/g' *

解説

sed は 標準入力に対して何かしらの処理を加えて標準出力に出力するコマンドです。

標準入力 -> sed (処理) -> 標準出力

ちょっとわかりづらいので上のコマンドの例を続けてきましょう。

sed のあとの -i オプションは標準出力を標準入力と同じ入力する、つまり同じファイルにsedの処理結果を出力するということになります。

このケースだと前回も使用致しました正規表現の一つの*がBBディレクトリのすべてのファイルを指して標準入力として入力されます。-i オプションによってその標準入力と同じものを標準出力とします。

具体的にいいますと、標準入力にBBViewController.mを入力するときは

BBViewController.m -> sed (処理) -> BBViewController.m

となり、これがすべてのファイルについて同様に行われて、sedの処理結果が同じファイルに上書きされます。

肝心のsedの処理内容をみていきましょう。

sed -e 処理内容

というフォーマットになるのですがsedはとても便利なコマンドでファイル内の記述を検索して置換したり、行を削除したり、表示したりすることができます。

今回の処理内容は

’s/AA/BB/g'

これはファイル内のAAをBBで置換する処理で前回と違うの最後にgがついてるとこ。ある行内のこれはすべてのマッチしたAAをBBに変えるということである。もしこれがなかったら1行に複数ある場合は一番最初のものしか置換されない。

上のBBViewController.mのファイルの中で例を挙げるとgを最後につけないと上の20行については

BBViewController2 * vc2 = [[AAViewController init] alloc];

となり二番目のAAはBBに置換されない。

一番最初にしめしたコマンドを打ちますと、

f:id:skytechblog:20151216033047p:plain

BBディレクトリにあるすべてファイルについて上のようになります。  (これやるとBBViewController.m-e のようなアディショナルなファイルが生まれるのですが,これがいったい何なのか勉強不足なのでまだわかってません orz 知っている方はご教授いただけると嬉しいです。)

まとめ

今回もターミナルのコマンドについて書きましたが、調べてみるともっとたくさんあってCUIの世界をもっとっもっと勉強しなければいけないなと思いました。Xcodeとか使っているとあんまり使わないんだけど笑

この記事をみて少しでもエンジニアインターンに興味をもっていただいたら →nanameue