需要有关 awk/sed/perl 模式与正则表达式/grep 的帮助

需要有关 awk/sed/perl 模式与正则表达式/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 中可能

$数据库名称 = “dbweb” ;

前任:mysql_用户在 file2 中可能

$mysql_user="root" ;

结果:它应该显示所有 6 个变量的变量声明以及文件名

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

答案1

这不是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);
        }
    }
}

相关内容