2015-08-05 1 views
1

Я пытаюсь найти и заменить слово во всем моем проекте, и я попытался найти версии find и sed в centos 7, но ничего не работает.find и sed не работает в centos 7

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' 

СЭД: не может читать с/mysql_/mysqli_/г: Нет такого файла или каталога

Все эти команды дает мне эту ошибку в цикле, хотя я бегу эти команды из корня моего проекта. Разрешения верны. Если я просто использую команду find только, она работает

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

Я пробовал решения, доступные в stackoverflow, но ничего не работает.

ответ

2

Кулак пара кавычек в sed не нужны, попробуйте:

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

Синтаксис либо -i'prefix' или --in-place='prefix', не -i 'prefix', так как вы добавили пробел между префиксом и аргументом, она делает sed используйте аргумент префикса (пустая строка) в качестве регулярного выражения и используйте фактическое регулярное выражение как аргумент имени файла, который, очевидно, не будет найден.

Именно поэтому вы получаете ошибку can't read s/mysql_/mysqli_/g: No such file or directory.

+0

Параметр -i требует пустой строки '' на OSX. – RegularlyScheduledProgramming

+0

Затем он должен, вероятно, удалить пробел между '-i' и префиксом. – KurzedMetal

+0

Спасибо. Он работает сейчас. Решение KurzedMetal. – Humayun