【Linux】複数あるファイルの中から特定の文字列を一括置換するコマンド
2014 August 01
複数あるファイルの中から特定の文字列を一括置換したいときのLinuxコマンド。
このコマンドは実行したら修正できないので要注意。
find ./ -type f | xargs sed -i "s/hoge/fuga/g"
【上記コマンドの説明】
find
find の次で指定したディレクトリ以下のファイルを検索する。
ファイル検索の構文は「find [path] [検索条件] [アクション]」
—
./
今いるディレクトリ以下が検索対象。「~/」とするとホームディレクトリ以下が検索対象となる。
./ の代わりにフルパスでも可。この場合も指定したディレクトリ以下が検索対象になる。
—
-type f
指定したファイルタイプを検索する。fが通常ファイルを,cまたはdとするとディレクトリを,lとするとシンボリック・リンクを検索します。
—
xargs
標準入力からコマンドラインを作成し、それを実行する
—
sed
文字列の置換,行の削除を行う
sed の基本構文は「sed (オプション) [対象ファイル]」
—
-i
文字列を挿入する
—
s/置換条件/置換文字/g
置換条件はこれから置き換えたい、元の文字列。置換文字は置換後の文字列。
最後に g をつけた場合は。置換条件に一致した全ての文字列を置換文字に置き換える。
なぜこのコマンドは修正できないのか?
一度このコマンドを実行後、元の文字列または別の文字列に変更したい場合、他の関係のない文字列に干渉してしまう場合があるためです。
例えば、
「hogehogefugafugapiyopiyo」を
$ find ./ -type f | xargs sed -i "s/hoge/fuga/g"
で「fugafugafugafugapiyopiyo」に置換。
でもやっぱり元に戻したいので上記の逆をして
$ find ./ -type f | xargs sed -i "s/fuga/hoge/g"
としても、
「hogehogehogehogepiyopiyo」
こうにしかなりませんT T
大切なファイルのときは慎重に置換しましょう☆