查找和 sed 在 centos 7 中不起作用

find and sed doesn't work in centos 7

我试图在我的整个项目中查找和替换一个词,我在 centos 7 中尝试了以下版本的 find 和 sed,但没有任何效果。

find ./ -name "*.php" -exec sed -i '' s/mysql_/mysqli_/g \;
find ./ -name "*.php" -exec sed -i '' s/mysql_/mysqli_/g {} \;
find ./ -name "*.php" -exec sed -i '' 's/mysql_/mysqli_/g' {} \;
find ./ -name "*.php" -ls | xargs sed -i '' 's/mysql_/mysqli_/g'

sed: can't read s/mysql_/mysqli_/g: No such file or directory

尽管我是 运行 来自项目根目录的这些命令,但以上所有命令都在循环中给我这个错误。权限都是正确的。如果我只是单独使用 find 命令,它就可以工作

find ./ -name "*.php" -ls (This Works)

我尝试了 Whosebug 中可用的解决方案,但没有任何效果。

sed 中的第一对引号不是必需的,尝试:

find ./ -name "*.php" -exec sed -i s/mysql_/mysqli_/g {} \;

语法是 -i'prefix'--in-place='prefix',而不是 -i 'prefix',因为您在前缀和参数之间添加了 space,它使 sed 使用前缀(空字符串)参数作为正则表达式并使用实际的正则表达式作为文件名参数,这显然找不到。

这就是您收到 can't read s/mysql_/mysqli_/g: No such file or directory 错误的原因。