在变量中传递通配符以与Perl中的grep一起使用?

时间:2014-10-06 14:54:22

标签: perl grep wildcard

我尝试为变量分配一个带有通配符的文件路径,然后在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。:没有这样的文件或目录

感谢。

1 个答案:

答案 0 :(得分:2)

我认为你的路径名不匹配;您的代码看起来应该可以工作 - 虽然您不需要在Perl字符串中的/前面放置反斜杠,并且您可以使用插值而不是连接:

my $filename = "/sysadm/shared/NCC/logs/$SYSTEM/ftp_log.*";

也就是说,从grepsedperl投降是有点愚蠢的。这是在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;