2

いくつかのフォルダにいくつかのスクリプトがあります。お気に入り/var/www/sites

ここで、すべてのフォルダーとサブフォルダーのスクリプトにハードコードされているすべての電子メールアドレスを置き換え、自分の電子メールアドレスに置き換えたいと思います。

どうやってやるの。

私は使用して見つけることができます

grep -rn "abc@gmail.com" /var/www/sites/

しかし、正規表現を使用して置き換える方法がわかりません

4

4 に答える 4

2

perlを試してください:

perl -p -i -e 's/abc@gmail.com/new@gmail.com/g' /var/www/sites/*

またはperl/findを使用:

find /var/www/sites/ -exec perl -p -i -e 's/abc@gmail.com/new@gmail.com/g' {} \;
于 2012-11-30T17:25:46.657 に答える
1

を開き、次に

あなたがを持っているなら:

oldmail="abc@gmail.com"
newmail="myemail@provider.tld"
shopt -s globstar
sed -i "/$oldmail/s/$oldmail/$newmail/g" /var/www/sites/**/*

そうでない場合:

oldmail="abc@gmail.com"
newmail="myemail@provider.tld"
find /var/www/sites -type f -exec sed -i "/$oldmail/s/$oldmail/$newmail/g" {} +

このソリューションには、ファイルに検索された文字列が含まれていない場合でも、ファイル内のタイムスタンプを変更しないという利点があります。これは、以前のソリューションとは異なりsed -iます(ここでは)perl -i -pegrep/pattern/

于 2012-11-30T17:25:17.160 に答える
0
find /var/www/sites -type f | xargs sed --in-place 's/abc@gmail\.com/mynewemail@elsewhere.com/g'
于 2012-11-30T17:26:20.320 に答える
-2

sedを試してください。

grep -rl "abc@gmail.com" /var/www/sites/ | xargs sed -i 's/oldemail/newemail/g'

編集:

フィードバックを考慮に入れました。以前の間違った解決策について申し訳ありません!

于 2012-11-30T17:24:44.520 に答える