grep을 통해 PHP 함수의 매개변수를 얻는 방법은 무엇입니까?

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합니다.

답변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';

관련 정보