Precisa de ajuda no padrão awk / sed / perl com regex / grep

1

Saída de arquivo de amostra do 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);

O padrão awk deve obter valores databasename, DB_USER E DB_PASSWD da linha 1 e mysql_host, mysql_user e mysql_password da linha 2 Por exemplo,all variables inside the function.

Em seguida, ele deve procurar a declaração dessa variável no arquivo antes de: (ponto-e-vírgula)

ex: databasename no arquivo1 pode ser

$databasename = "dbweb" ;

ex: mysql_user no arquivo2 pode ser

$mysql_user="root" ;

Resultado: deve exibir declarações de variáveis de todas as 6 variáveis, juntamente com nomes de arquivos

file2:$mysql_host = "db1";
file2:$mysql_user = "root";
file1:$DB_USER = 'user';
    
por Jayakumar K 09.02.2011 / 12:31

1 resposta

2

Isso não é awk , mas esse script em Perl que lê stdin deve fazer isso (ou pelo menos fornecer algumas dicas):

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);
        }
    }
}
    
por 09.02.2011 / 14:58