我的一台Linux MySQL服务器崩溃了。所以我放了一个备份,但是这次MySQL运行的是本地(localhost)而不是远程(IP地址)。
感谢Stack Overflow用户,我找到了一个很好的命令,可以在给定目录中的所有.php文件中找到IP地址!我为此使用的命令是:
grep -r -l --include="*.php" "100.110.120.130" .
这将输出必要的文件及其课程位置。如果结果少于10个,我显然会手动更改它们。但是,我收到了200多个点击/结果。
所以现在我想知道是否存在一个安全命令,该命令以文本“ localhost”代替IP地址(例如:100.110.120.130),而不是给定目录(/ var / www / vhosts /)递归。
也许,如果只有可能并且工作量不大,还会将更改的行输出到文件中吗?我不知道那是否有可能。
也许有人可以为我提供可行的解决方案?老实说,我不敢为此无所事事。这就是为什么我创建了一个新线程。
答案 0 :(得分:2)
在多个文件中替换字符串的最标准方法是使用诸如sed
之类的工具。通过grep
与while loop
结合使用,可以逐行读取(当输出到文件时)通过sed
获取的文件列表。
$ grep -r -l --include="*.php" "100.110.120.130" . > list.txt
# this will output all matching files to list.txt
在匹配文件中替换IP :
while read -r line ; do echo "$line" >> updated.txt ; sed -i 's/100.110.120.130/localhost/g' "${line}" ; done<list.txt
这将使用list.txt
并将其逐行读取到sed
命令,该命令应将所有出现的IP替换为“ localhost”。 echo
之前的sed
命令输出所有将被修改为文件updated.txt
的文件名(尽管list.txt
包含相同的文件名,但这不是必需的,尽管也许可以用作验证手段。)
要在修改所有匹配文件之前进行试运行,请删除
-i
命令中的sed
,它将把输出打印到stdout
而不是就地修改文件。