LINUX.ORG.RU
Форум — Admin  

Регулярное выражение для замены текста в файлах .php

 , ,


1

1

Сабж.

Есть виртуальный сервер на дебиане, на нём хостятся сайты. Есть региональная сетка сайтов на поддоменах типа: abakan, tula, novosibirsk и так далее. В каждой папке есть файл типа index.php. Надо заменить кусок определенного кода на название папки. То есть

//$sql = "SELECT * FROM `TABLE 1` WHERE `translit` = 'novosibirsk'";
$sql = "SELECT * FROM `TABLE 1` WHERE `translit` = 'moscow'";
$res = $mysqli->query($sql);
$row = $res->fetch_assoc();
//var_dump($row);
mysqli_close($mysqli); 

заменить на

//$sql = "SELECT * FROM `TABLE 1` WHERE `translit` = 'novosibirsk'";
$sql = "SELECT * FROM `TABLE 1` WHERE `translit` = 'abakan'";
$res = $mysqli->query($sql);
$row = $res->fetch_assoc();
//var_dump($row);
mysqli_close($mysqli);

если папка с файлом называется abakan

Если есть способ сделать это не на сервере, а скажем на винде, с помощью программы, то же буду благодарен за мануал. Попытался разобраться с TextPipe, но не нашёл нужного фильтра. Приму любую помощь, что бы разобраться с этой задачей. Спасибо.

Я бы использовал питон, примерно по следующему алгоритму.

Вытащить название каталога, прочитать нужный файл, заменить нужные вхождения на название каталога, записать обратно.

Может быть логически не совсем корректно, но должно сработать.

Hanuken ★
()
#!/bin/bash
for d in */ ; do
 echo ${d%%/}
 sed -i.bak "s/\`translit\` = '.*'/\`translit\` = '${d%%/}'/g" ${d}*.php
done
Deleted
()
for i in *; do sed -i "s|moscow|$i|g" "$i"/index.php;done
bass ★★★★★
()
Последнее исправление: bass (всего исправлений: 1)
Ответ на: комментарий от Deleted

Вас только это смутило? Т.е. сам подход к задаче это нормально, только * в селекте не нормально :))))))

anc ★★★★★
()
Ответ на: комментарий от anc

Нет, меня смутило всё, но сильнее всего смущает то, с чем недавно сталкивался :-))

Deleted
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.