¿Cómo obtener los argumentos de una función php mediante grep?

¿Cómo obtener los argumentos de una función php mediante grep?

Estoy escribiendo un script para informarme la información de inicio de sesión de la base de datos para cada sitio web basado en PHP en un servidor que estoy migrando. La información de inicio de sesión generalmente se hace así:

$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';

mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);

O así:

$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);

El script busca cada línea que contiene una de las funciones de conexión de PHP:

grep -irE "mysql_connect\|mysql_select_db\|new PDO" *

Ahora bien, ¿cómo puedo obtener cada cadena que comienza $y termina con un no alfanumérico? Además, si no ;se encuentra ningún carácter en la pantalla, me gustaría recibir una notificación para poder manejarlo manualmente, ya que algunos codificadores pueden hacer esto:

$pdo = new PDO("mysql: host={$servername};
                dbname={$$database_name}",
                $database_username,
                $database_password
               );

Después de obtener estos tokens (variables PHP), volveré a buscar los tokens en el archivo con la esperanza de obtener sus valores;

Respuesta1

No estoy realmente seguro de lo que intenta hacer aquí, pero puede grep"todas las cadenas que comienzan $y terminan con un carácter no alfanumérico" con esto:

grep -oP '\$.+?\W' 

En respuesta a tu comentario, ¿qué tal algo como esto?

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

Este scriptlet encontrará todos los archivos .php, buscará en cada uno de ellos las variables que le interesan y luego imprimirá la primera instancia de cada variable en el archivo en el que se encontró. Por ejemplo, creé 2 archivos .php aa.phpy bb.phpsus los contenidos son:

$ 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);

El resultado del script anterior es:

----- ./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';

información relacionada