
Я пишу скрипт, чтобы сообщить мне информацию о входе в базу данных для каждого веб-сайта на основе PHP на сервере, который я мигрирую. Информация о входе обычно делается либо так:
$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';
mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);
Или вот так:
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
Скрипт ищет каждую строку, содержащую одну из функций подключения PHP:
grep -irE "mysql_connect\|mysql_select_db\|new PDO" *
Теперь, как мне получить каждую строку, которая начинается $
и заканчивается не буквенно-цифровым символом? Кроме того, если ;
на экране не найдено ни одного символа, я хотел бы получать уведомление, чтобы я мог обработать это вручную, как некоторые кодеры могут делать это:
$pdo = new PDO("mysql: host={$servername};
dbname={$$database_name}",
$database_username,
$database_password
);
После того, как я получу эти токены (переменные PHP), я снова выполню grep файла на предмет токенов в надежде получить их значения;
решение1
Я не совсем уверен, что вы пытаетесь здесь сделать, но вы можете grep
«все строки, которые начинаются $
и заканчиваются не буквенно-цифровым символом» с помощью этого:
grep -oP '\$.+?\W'
В ответ на ваш комментарий, как насчет чего-то вроде этого:
for f in `find . -name "*.php"`; do \
echo "----- $f -----";
for s in $(grep -iE "mysql_connect|mysql_select_db|new PDO" $f |
grep -oP '\$\w+?\W' | sed 's/.$//' | sort | uniq); do \
grep -m 1 $s $f;
done;
done
Этот скриптлет найдет все файлы .php, выполнит grep каждого из них на предмет интересующих вас переменных, а затем выведет первое вхождение каждой переменной в файле, в котором она была найдена. Например, я создал 2 файла .php aa.php
и bb.php
, их содержимое следующее:
$ cat aa.php
$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';
mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);
$ cat bb.php
$servername='localhost2';
$database_username='some2Name';
$database_password='p@ssw0rd2';
$database_name='someDatabase2';
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
Вывод приведенного выше скрипта:
----- ./bb.php -----
$database_name='someDatabase2';
$database_password='p@ssw0rd2';
$database_username='some2Name';
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
$servername='localhost2';
----- ./aa.php -----
$database_name='someDatabase';
$database_password='p@ssw0rd';
$database_username='someName';
$servername='localhost';