我在一些文件夹中有一些脚本。 像/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 -i
& perl -i -pe
解决方案没有以前的grep
(我在这里用/pattern/
来做)
试试sed。
grep -rl "abc@gmail.com" /var/www/sites/ | xargs sed -i 's/oldemail/newemail/g'
编辑:
考虑到了反馈。 对不起以前错误的解决方案!