ターミナルから複数ファイル内の文字列の置換
僕が普段使っているBracketsにはすべてのファイルからの検索はあるけど、置換はない。 だから、複数ファイルの文字列の置換はソフトウェアを使って行っていた。
別に不自由はなかったけど、Windows環境に依存していたからあまり好きではなかった。 そこでターミナルからこの作業ができないかと思った。
最初に見つけたのはfindを使った方法。
find . -name "*.txt" -exec sh -c 'sed -e "s/aaa/bbb/" {} > {}' \;
これを実行すると今いるディレクトリのtxtファイル内のaaaをbbbに置換する。 これでもいいんだけど、すこし理解しづらい。
直接シェルスクリプト書いたほうがわかりやすかった。
sh-3.2$ for file in *.txt
> do
> sed -e "s/aaa/bbb/" $file > $file
> done
これでさっきと同じ処理ができる。
zshだともっと短くてこんなかんじになる。(shとかbashだとエラー)
% for file in *.txt
for> sed -e "s/aaa/bbb/" $file > $file
これならどのOSでも使えるし、覚えやすいから便利。 積極的に使っていく。