我怎样才能取代在Linux中的特定文件夹中find的所有电子邮件地址

我在一些文件夹中有一些脚本。 像/var/www/sites

现在我想要replace所有文件夹和子文件夹中的脚本中硬编码的所有电子邮件地址,并replace为我的电子邮件地址

我怎样才能做到这一点。

我可以find使用

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

但我不知道如何使用正则expression式和replace

 find /var/www/sites -type f | xargs sed --in-place 's/abc@gmail\.com/mynewemail@elsewhere.com/g' 

试试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' {} \; 

然后打开一个shell

如果你有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 -iperl -i -pe解决方案没有以前的grep (我在这里用/pattern/来做)

试试sed。

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

编辑:

考虑到了反馈。 对不起以前错误的解决方案!