いくつかのフォルダにいくつかのスクリプトがあります。お気に入り/var/www/sites
ここで、すべてのフォルダーとサブフォルダーのスクリプトにハードコードされているすべての電子メールアドレスを置き換え、自分の電子メールアドレスに置き換えたいと思います。
どうやってやるの。
私は使用して見つけることができます
grep -rn "abc@gmail.com" /var/www/sites/
しかし、正規表現を使用して置き換える方法がわかりません
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' {} \;
シェルを開き、次に
あなたがbash4を持っているなら:
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 -pe
grep
/pattern/
find /var/www/sites -type f | xargs sed --in-place 's/abc@gmail\.com/mynewemail@elsewhere.com/g'
sedを試してください。
grep -rl "abc@gmail.com" /var/www/sites/ | xargs sed -i 's/oldemail/newemail/g'
編集:
フィードバックを考慮に入れました。以前の間違った解決策について申し訳ありません!