
Estou escrevendo um script para informar as informações de login do banco de dados para cada site baseado em PHP em um servidor que estou migrando. As informações de login geralmente são feitas assim:
$servername='localhost';
$database_username='someName';
$database_password='p@ssw0rd';
$database_name='someDatabase';
mysql_connect($servername, $database_username, $database_password);
mysql_select_db($database_name);
Ou assim:
$pdo = new PDO("mysql: host={$servername}; dbname={$$database_name}", $database_username, $database_password);
O script está procurando por cada linha que contém uma das funções de conexão do PHP:
grep -irE "mysql_connect\|mysql_select_db\|new PDO" *
Agora, como posso obter cada string que começa $
e termina com um número não alfanumérico? Além disso, se nenhum ;
caractere for encontrado na tela, gostaria de ser notificado para poder lidar com isso manualmente, pois alguns programadores podem fazer isso:
$pdo = new PDO("mysql: host={$servername};
dbname={$$database_name}",
$database_username,
$database_password
);
Depois de obter esses tokens (variáveis PHP), irei usar o arquivo novamente para obter os tokens na esperança de obter seus valores;
Responder1
Não tenho certeza do que você está tentando fazer aqui, mas você pode grep
"todas as strings que começam $
e terminam com um caractere não alfanumérico" com isto:
grep -oP '\$.+?\W'
Em resposta ao seu comentário, que tal algo assim:
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 os arquivos .php, fará grep em cada um deles para as variáveis de seu interesse e, em seguida, imprimirá a primeira instância de cada variável no arquivo em que foi encontrada. Por exemplo, criei 2 arquivos .php aa.php
e bb.php
, seus os conteúdos são:
$ 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);
A saída do script acima é:
----- ./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';