2012-01-18 5 views
12

Я был в процессе создания класса User, где один из методов был get_privileges();.Как изменить все вхождения слова во все файлы в каталоге

После нескольких часов хлопнув головой в клавиатуру, я, наконец, обнаружил, что предыдущий кодировщик, который я унаследовал эту конкретную базу данных по буквам слово «привилегии», как «privelages» в базе данных MySQL, и, таким образом, также везде в сотнях файлов, которые обращаются к этим «privelages», это написано именно так.

Есть ли способ в Linux (Ubuntu Server ), что я могу пройти через каждое место в папке /var/www и заменить «privelages» с «привилегий», так что я не приходится иметь дело с этой опечаткой и кодом вокруг него?

ответ

27

Вариантом, который принимает во внимание подкаталогов (непроверенные):

find /var/www -type f -exec sed -i 's/privelages/privileges/g' {} \; 

Это будет find все файлы (каталоги, указанные -type f) под /var/www, и выполните команду sed, чтобы заменить «privelages» «привилегиями» на каждый найденный файл.

+8

Спасибо - для людей на Mac с BSD sed. Вам нужно добавить расширение к аргументу -i. Так же: 'sed -i" "'s/prive ...' – xer0x

+0

Если вы хотите запустить 'sed' только файлы, содержащие орфографическую ошибку (которую вы хотите, если ваш проект содержит тысячи файлов) , вы можете сделать 'grep -l -r" privelages "/ var/www | xargs -I "@" sed -i 's/privelages/privileges/g' @ ' –

+0

с использованием grep, а затем sed, вероятно, хуже, чем просто использование sed, поскольку это означает открытие и чтение каждого файла дважды – cegfault

5

Проверьте это: http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

cd /var/www 
sed -i 's/privelages/privileges/g' * 
+0

Большое вам спасибо, я ценю ответ. –

+1

Вам нужно будет добавить 'find' или использовать оболочку, которая позволяет вам объединять все файлы во всех подкаталогах (подсказка:' **/* 'делает это в некоторых оболочках), если вы хотите перезаписывать подкаталоги. Это FAQ; поиск похожих вопросов. Симпатии к вам за то, что вам нужно справиться с неграмотным предшественником ... – tripleee