2010-12-14 25 views
15

ファイルのフォルダ内の文字列を検索して置換しようとしています。ファイル内の文字列を検索して置換する

誰かが私を助けてくれますか? 「これは」

#!/bin/bash 
OLD="This is a" 
NEW="I am a" 
DPATH="/home/user/test/*.txt" 
BPATH="/home/user/test/backup/foo" 
[ ! -d $BPATH ] && mkdir -p $BPATH || : 
for f in $DPATH 
do 
    if [ -f $f -a -r $f ]; then 
    /bin/cp -f $f $BPATH 
    sed "s/$OLD/$NEW/g" "$f" 
    else 
    echo "Error: Cannot read $f" 
    fi 
done 

は今、これは文字列を検索するようだと、これだけのプリント画面には「私は」で置き換えます:

私のスクリプトは次のようです。

ファイル自体を置き換える必要があります。

おかげ

答えて

26

は場所に変更を加えることsed-iオプションを使用します。

sed -i "s/$OLD/$NEW/g" "$f" 
    ^^ 
+0

うまくいった!私は何かを逃したことを知っていた。ありがとう – terrid25

+0

私のシェルスクリプトを変更する簡単な方法はありますか?サブフォルダをチェックインするには?/home/user/test/xyz? – terrid25

+0

#!bin/bash OLD = "これは" NEW "" BPATH = "/ home/user/backup/foo" が見つかりました。 -name '* .shtml' -type f | SEDを: しばらくは、ファイル名 -iを使用しようとすると、私はこのエラーが発生します – terrid25

2

出力は、次の理由の画面(stdout)に行く:

sed "s/$OLD/$NEW/g" "$f" 

ファイルにリダイレクトしてください(以下は、新しいファイルにリダイレクトし、元を上書きすることをリネームファイル):

sed "s/$OLD/$NEW/g" "$f" > "$f.new" && mv "$f.new" "$f" 
+0

これは、.text.newファイルと元のファイルexample.txtを作成します。上書きされ、空白になります。なぜどんなアイデア? – terrid25

+0

@ user390426:これは、aixが変数 "$ f.new"(2か所)と '" $ f "'を引用しなかったためです。また、 'mv'は無条件であってはなりません。代わりに、 'sed ... && mv ... 'でなければなりません。 –

+0

@Dennisご提案いただきありがとうございます。私は投稿を編集しました。 – NPE

0

これは私が使用してスニペットで、それはAPA、BEPAの除去を含む、複数行に渡っ(APAとBEPA間のすべてのものを削除します)は、i nは、現在のディレクトリの下にあるすべてのファイル、の.svnディレクトリを除外

find . \! -path '*.svn*' -type f -exec sed -i -n '1h;1!H;${;g;s/APA[ \t\r\n]*BEPA//g;p}' {} \; 
0

http://cs.boisestate.edu/~amit/teaching/handouts/cs-unix/node130.html

これをチェックしてください
########################################################## 
\#!/bin/sh 

\# sed/changeword 

prog=`basename $0` 

case $# in 
0|1) echo 'Usage:' $prog '<old string> <new string>'; exit 1;; 
esac 

old=$1 
new=$2 
for f in * 
do 
     if test "$f" != "$prog" 

     then 
      if test -f "$f" 
      then 
       sed "s/$old/$new/g" $f > $f.new 
       mv $f $f.orig 
       mv $f.new $f 
       echo $f done 
      fi 
     fi 
done 

############################################################## 
関連する問題