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

관련 정보