よくやるサブディレクトリごとのファイル中の文字列を一気に置換する方法 2003-01-14
- unixのコマンド、find, grep, sed, vi, cshを使います。
- ファイルの一覧 list.txt を作成する。
$ find . -type f -print > list.txt
$ vi list.txt
保存します。
で候補を絞りこむ。間違って、対象以外のファイルで置換をしないようにする。 (あとで、どのファイルに対して置換したかが確定できる。)
- 置換ルール候補を作成する。
(例えば、SKIN という文字列と define をそれぞれ、置換前候補とする。 正規表現OKです。)
$ vi rule.txt
SKIN
define
保存します。
の2行を入力して保存する。
- 置換の前に、置換前候補があっているか確認する。
$ cp list.txt grep_go.csh
$ vi grep_go.csh
でviエディタで、
:1,$ s/^/grep -nH -f rule.txt /
と入力して、保存する。(ようは、ファイル名の前にgrepコマンドを埋め込む。)
- 検索してみる。
$ csh grep_go.csh|more
このコマンドで修正対象行の一覧を画面に表示します。
- 十分に変換部分の行をチェックし(ちがっていたら、rule,txt,list.txtを修正する。)たら、
置換後文字列を定義します。 この場合は、例えば。SKIN→skinに、define→Defineに置換するとします。
$ vi rule.txt
s/SKIN/skin/g
s/define/Define/g
保存します。
- 置換するためのコマンド sedCp を作成します。
$ vi sedCp
#!/bin/csh
onintr interrupt
sed -f $1 $2 > $1.out.$$
mv $1.out.$$ $2
exit 0;
interrupt:
rm -f $1.out.$$
保存します。
$ chmod a+x sedCp
- 置換スクリプト allCnv.csh を作成します。
$ cp list.txt allCnv.csh
$ vi allCnv.csh
でviエディタで、
:1,$ s/^/./sedCp rule.txt /
保存します。
- 置換スクリプト allCnv.csh を実行する。
csh allCnv.sh
- あとは、置換後ファイルをチェックする。
以上
開発Tips
|
|
|
|