UniServer / UniPrint / UniHttpd


よくやるサブディレクトリごとのファイル中の文字列を一気に置換する方法 2003-01-14

  1. unixのコマンド、find, grep, sed, vi, cshを使います。
  1. ファイルの一覧 list.txt を作成する。
    $ find . -type f -print > list.txt
    $ vi list.txt
     
    保存します。
    で候補を絞りこむ。間違って、対象以外のファイルで置換をしないようにする。
    (あとで、どのファイルに対して置換したかが確定できる。)

  2. 置換ルール候補を作成する。
    (例えば、SKIN という文字列と define をそれぞれ、置換前候補とする。
    正規表現OKです。)
    $ vi rule.txt
    SKIN
    define
     
    保存します。
    の2行を入力して保存する。

  3. 置換の前に、置換前候補があっているか確認する。
    $ cp list.txt grep_go.csh
    $ vi grep_go.csh
    でviエディタで、
     
    :1,$ s/^/grep -nH -f rule.txt /
     
    と入力して、保存する。(ようは、ファイル名の前にgrepコマンドを埋め込む。)

  4. 検索してみる。
    $ csh grep_go.csh|more
    このコマンドで修正対象行の一覧を画面に表示します。

  5. 十分に変換部分の行をチェックし(ちがっていたら、rule,txt,list.txtを修正する。)たら、
    置換後文字列を定義します。
    この場合は、例えば。SKIN→skinに、define→Defineに置換するとします。
    $ vi rule.txt
    s/SKIN/skin/g
    s/define/Define/g
     
    保存します。

  6. 置換するためのコマンド 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

  7. 置換スクリプト allCnv.csh を作成します。
    $ cp list.txt allCnv.csh
    $ vi allCnv.csh
    でviエディタで、
    :1,$ s/^/./sedCp  rule.txt /
     
    保存します。

  8. 置換スクリプト allCnv.csh を実行する。
    csh allCnv.sh

  9. あとは、置換後ファイルをチェックする。

以上

開発Tips

 

Copyright © UTL Co.,Ltd. All Rights Reserved. [UTL]