Назад | Перейти на главную страницу

Нужна помощь по шаблону awk / sed / perl с regex / grep

Пример вывода файла из grep

file1:my $dbh = DBI->connect("dbi:mysql:$database_name", $DB_USER, $DB_PASSWD)
file2:($dbc,$rc) = mysql_connect($mysql_host,$mysql_user,$mysql_password);

Шаблон awk должен получать значения имя базы данных, DB_USER и DB_PASSWD из строки 1 и mysql_host, mysql_user и mysql_password из строки 2, т.е. all variables inside the function.

Затем он должен искать объявление этой переменной в файле до: (точка с запятой)

пример: имя базы данных в file1 может быть

$ databasename = "dbweb";

пример: mysql_user в файле2 может быть

$ mysql_user = "корень";

Результат: он должен отображать объявления переменных всех 6 переменных вместе с именами файлов.

file2:$mysql_host = "db1";
file2:$mysql_user = "root";
file1:$DB_USER = 'user';

Это не awk, но этот сценарий Perl читается из stdin должен это сделать (или хотя бы дать несколько подсказок):

while(<>) { # read stdin
    chomp;
    if (/^([^:]+):(.*)$/) { # match filename
        my $file = $1;
        my $tail = $2;
        while ($tail =~ /\$([A-Za-z0-9_]+)/g) { # match each $variable in the line
            my $varname = $1;
            open (FILE, $file);
            while (<FILE>) {
                chomp;
                if (/\$$varname\s*=\s*(.*)/ ) { # match the current variable
                    print "$file: \$$varname = $1\n";
                }
            }
            close (FILE);
        }
    }
}