저는 마이그레이션할 서버의 각 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';