Скрипт поиска и замены в файлах - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD63844.6180
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 03.12.2009, 18:58   #1
Weil
Senior Member
 
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44010
По умолчанию Скрипт поиска и замены в файлах

Помогите, плз, со скриптом.
Скрипт ищет в папке, куда его залили и во всех вложеных папках, файлы с определенным расширением (html, htm, php - к примеру), ищет в этих файлах определенную фразу и заменяет ее другой (к примеру domain1.org на domain2.info).
Weil вне форума  
Старый 03.12.2009, 19:03   #2
lance
Синьор
 
Аватар для lance
 
Регистрация: 30.05.2008
Сообщений: 975
Бабло: $153121
По умолчанию

Как-то так
PHP код:
<?
$work_dir
="./";         
// рабочая директория - обязательно должна заканчиваться
// символом "/"
$excl_dir=array();
$excl_dir[0]="./no_work_here/";         
$excl_dir[1]="./and_here/and_here/";
// директории, где поиск/замена не производятся - обязательно должны заканчиваться
// символом "/"
$file_mask_1=".html";    
$file_mask_2=".js";
// маски обрабатываемых файлов (будут обработаны все файлы,
// содержащие данную строку в имени)
$search_str="test";    #что ищем
$replace_str="TEST";    #чем заменяем
//******************************************************
$level=0;
function 
sr($dir)
{
global 
$level,$file_mask_1,$file_mask_2,$search_str,$replace_str,$excl_dir;
echo 
"<b>";
for (
$i=0;$i<$level;$i++) echo "* * ";
echo 
$dir."</b>";
if (@
in_array($dir,$excl_dir))
{
echo 
" - needn't search & replace<br>";
return;
}
echo 
"<br>";
$p dir($dir);
while(
$ent=$p->read()) 
{
if (
$ent!="." && $ent!=".." && !is_dir($dir $ent) && (eregi(sql_regcase($file_mask_1),$ent) || eregi(sql_regcase($file_mask_2),$ent)))
{
$tmp=@file($dir.$ent);
$str=@implode("",$tmp);
if (
strpos("@!#%xrenoder^&*()".$str,$search_str))
{
for (
$i=0;$i<($level)+1;$i++) echo "* * ";
echo 
$dir.$ent." found...";
$str=str_replace($search_str,$replace_str,$str);
if (
$fp=@fopen($dir.$ent"w"))
{
flock($fp,LOCK_EX);     
fwrite($fp,$str);
fclose($fp);
echo 
" and replace<br>";
}
else echo 
" and <b>can't replace</b><br>";
}
}
elseif(
$ent!="." and $ent!=".." and is_dir($dir $ent))
{
$level++;
sr($dir.$ent."/");
$level--;
}
}
$p->close();
return;
}
sr($work_dir);
echo 
"SEARCH & REPLACE Complete";
?>
lance вне форума  
Старый 03.12.2009, 20:01   #3
Aston Martim
Senior Member
 
Аватар для Aston Martim
 
Регистрация: 29.03.2009
Сообщений: 687
Бабло: $95875
По умолчанию

Ну вы любители стрелять из пушки по воробьям =)
Вот поиск и замена с помощью find
__________________
Мой форум о Бали
Aston Martim вне форума  
Старый 04.12.2009, 00:45   #4
dealer
me gusta
 
Аватар для dealer
 
Регистрация: 01.06.2009
Сообщений: 746
Бабло: $135376
По умолчанию

PHP код:
<?
$pages 
glob("/home/user/htdocs/*");
$chto 'dada';
$nachto 'blah';
foreach(
$pages as $page)
    if(!
substr_count((string)$page'index.php')) {
    
$data file_get_contents($page);
    
$data str_ireplace($chto$nachto$data);
    
file_put_contents($page$data);
}
?>
бывает, что нет возможности использовать консоль или нужно заменить файлы на win машине. код поменьше
__________________
Знать путь и пройти его — не одно и то же. Pharmcash & PharmcashUSA - знаем, проходили... Лидеры в фарме
dealer вне форума  
Старый 04.12.2009, 03:13   #5
Weil
Senior Member
 
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44010
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от Aston Martim Посмотреть сообщение
Ну вы любители стрелять из пушки по воробьям =)
Вот поиск и замена с помощью find
Попробовал создать файл f.sh
#!/bin/sh
for i in `find /var/path-to/domain.org -name "*.html" -exec grep -H "domain.org" {} \; | awk -F":" '{print $1}' | xargs`; do sed -i 's/domain.org/domain.info/g' $i; done

Запустил ./f.sh
Пишет grep terminated by signal 13
Weil вне форума  
Старый 04.12.2009, 05:38   #6
Hatake
Юниор
 
Регистрация: 28.11.2009
Сообщений: 22
Бабло: $3245
По умолчанию

если на локальной машине win
есть прога замечательная find and replace
__________________
SMSConvert | SmartBucks
Hatake вне форума  
Старый 04.12.2009, 13:18   #7
Aston Martim
Senior Member
 
Аватар для Aston Martim
 
Регистрация: 29.03.2009
Сообщений: 687
Бабло: $95875
По умолчанию

Цитата:
Сообщение от Weil Посмотреть сообщение
Попробовал создать файл f.sh
#!/bin/sh
for i in `find /var/path-to/domain.org -name "*.html" -exec grep -H "domain.org" {} \; | awk -F":" '{print $1}' | xargs`; do sed -i 's/domain.org/domain.info/g' $i; done

Запустил ./f.sh
Пишет grep terminated by signal 13
Может скопировал как то криво.
Но оно точно рабочее - еще раз проверил.
__________________
Мой форум о Бали
Aston Martim вне форума