Как получить аргументы функции php с помощью grep?

Как получить аргументы функции php с помощью grep?

Я пишу скрипт, чтобы сообщить мне информацию о входе в базу данных для каждого веб-сайта на основе 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';

Связанный контент