Shell-Script
如何通過 grep 獲取 php 函式的參數?
我正在編寫一個腳本,讓我知道我正在遷移的伺服器上每個基於 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 文件以獲取標記,以獲取它們的值;
我不確定您在這裡要做什麼,但是您可以使用以下命令“以非字母數字字元
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';