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 -pe解决方案不同grep(我在这里使用/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 回答