2012-01-30 21 views
3

私は以下のスクリプトを使用して、フォルダ内の文字列を検索して置き換えています。 複数の$ searchnameと$ replacenameをテキストファイルから読み込んで元のフォルダの単語を置き換えるコードを変更するにはどうすればよいですか?ここフォルダシェルスクリプト内の文字列を検索して置き換えます

フォルダです:

テストフォルダ内
main folder: /USERS/path/to/test/ 

file1.txt file2.php ........... 

内部データ:フォルダ内

data.txt original/ script.sh tmp/ 

.TXT:検索のための

a1 a2 
b1 b2 
c1 c2 

スクリプトと置き換える:事前に

!/bin/bash 

FOLDER="/Users/path/to/test/original/" 
echo "******************************************" 
echo enter word to replace 
read searchterm 
echo enter word that replaces 
read replaceterm 



    for file in $(grep -l -R $searchterm $FOLDER) 


     do 

    sed -e "s/$searchterm/$replaceterm/g" $file > /Users/path/to/test/tmp/tempfile.tmp 
     mv /Users/path/to/test/tmp/tempfile.tmp $file 

     echo "Modified: " $file 

    done 




    echo " *** All Done! *** " 

感謝を。

+0

'sed'を実行するために' sed -i -e "/ $ search/$ replace/g" $ file'を実行することができます。つまり、 '> tempfile'と名前を変更する必要はありません。 –

+0

ありがとうございますが、作成したバックアップファイルを(端で-eを使用して)クリーンアップする必要があります。どのようにして新しいファイルを変更したファイルを送信できますか?ありがとう – john206

答えて

3

セットアップ検索のファイルをや用語を置き換えるように見えるように(私はsearch_and_replace.txtそれを呼び出すするつもりです):

 
searchone/replaceone 
searchtwo/replacetwo 
foo/bar 
... 

は、その後、あなたのbashスクリプトは次のようになります。

 
!/bin/bash 

FOLDER="/Users/path/to/test/original/" 

while read line; do 
    for file in `find $FOLDER -type f`; do 
     sed -i -e "s/$line/g" $file 
    done 
done < search_and_replace_terms.txt 

必要がありませんgrepで事前検索すると思います。

+0

私はあなたが示唆したようにしましたが、コードはsearch_and_replace_terms.txtの最初の行にのみ機能しました – john206

+0

私はファイル内に2行しかないと思います。ファイルの末尾に改行を追加してみてください。時には行末がなく、ファイルの終わりだけがある場合、最後の行は読み込まれますが、読み込みはエラーとともに存在します。 –

+0

あなたは正しいです。私は新しいラインを追加し、それは魅力があった。どうもありがとうございました。 -eや-e-eで終わるファイルを取り除くにはどうすればいいですか? – john206

関連する問題