【发布时间】:2012-11-30 17:23:05
【问题描述】:
我在某个文件夹中有一些脚本。喜欢/var/www/sites
现在我想替换所有文件夹和子文件夹中脚本中硬编码的所有电子邮件地址,并替换为我的电子邮件地址
我该怎么做。
我可以找到使用
grep -rn "abc@gmail.com" /var/www/sites/
但我不知道如何使用正则表达式和替换
【问题讨论】:
我在某个文件夹中有一些脚本。喜欢/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' {} \;
【讨论】:
打开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" {} +
此解决方案的优点是不修改文件中的时间戳,即使文件不包含搜索的字符串,这与没有先前 grep 的 sed -i 和 perl -i -pe 解决方案不同(我在这里用/pattern/ 做这个)
【讨论】:
bash4 的解决方案很不错!
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'
编辑:
考虑了反馈。很抱歉之前的错误解决方案!
【讨论】: