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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.