我尝试为变量分配一个带有通配符的文件路径,然后在grep命令中使用该变量。不幸的是,当我运行它时,没有看到通配符。我尝试使用。*而不是作为正则表达式,但都没有奏效。任何帮助将不胜感激。
我希望grep所有以ftp_log开头的文件,所以在命令行上它会是:
grep ftpd ftp_log.* | sed 's/\*//g' > <searchfile>`
似乎无法将其翻译为在perl中工作。
$filename = "\/sysadm\/shared\/NCC\/logs\/" . $SYSTEM . "\/ftp_log.*";
`grep ftpd $filename | sed 's/\*//g' > $searchfile`;
grep:/ sysadm / shared / NCC / logs / sslmlvfp1 / ftp_log。:没有这样的文件或目录
感谢。
答案 0 :(得分:2)
我认为你的路径名不匹配;您的代码看起来应该可以工作 - 虽然您不需要在Perl字符串中的/
前面放置反斜杠,并且您可以使用插值而不是连接:
my $filename = "/sysadm/shared/NCC/logs/$SYSTEM/ftp_log.*";
也就是说,从grep
向sed
或perl
投降是有点愚蠢的。这是在Perl程序中实现等效的一种方法:
open my $out, '>', $searchfile;
foreach my $filename (glob "/sysadm/shared/NCC/logs/$SYSTEM/ftp_log.*") {
open my $log, '<', $filename;
while (<$log>) {
if (/ftpd/) {
s/\*//g;
print $out $_;
}
}
close $log;
}
close $out;