grepでPHP関数のパラメータを取得するには?

grepでPHP関数のパラメータを取得するには?

私は、移行するサーバー上の各PHPベースのWebサイトのデータベースログイン情報を通知するスクリプトを作成しています。ログイン情報は通常、次のように完了します。

$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の接続関数の1つを含むすべての行を検索します。

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

おすすめ記事