![需要有关 awk/sed/perl 模式与正则表达式/grep 的帮助](https://linux22.com/image/538784/%E9%9C%80%E8%A6%81%E6%9C%89%E5%85%B3%20awk%2Fsed%2Fperl%20%E6%A8%A1%E5%BC%8F%E4%B8%8E%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%2Fgrep%20%E7%9A%84%E5%B8%AE%E5%8A%A9.png)
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);
}
}
}