在ssh2-> exec中的Perl Grep没有找到任何东西

时间:2014-07-24 15:15:55

标签: regex linux perl ssh grep

我设计了一个程序,遍历我所有应用程序中不同Solaris(Unix)框中的每个日志文件,并查找某个错误。所以,我设计了这样的程序:

my $ssh2 = Net::SSH2->new();
$ssh2->connect($host) or die "Unable to connect Host $@ \n";
$ssh2->auth_keyboard($user,$pass) or die "Unable to login $@ \n";

$chan1 = $ssh2->channel();
$chan1->exec("find /apps/appName/loc/Logs/server/ -type f | xargs grep \"CVS Call\" ");
while(<$chan1>) {
    print $_ . "\n";
}

如果我要用一个词(只是&#39; CVS&#39;),它就可以了。但是,第二个我添加一个空格或一个点,它没有找到任何东西。我尝试用[[:space:]]或[:space:]替换空格,但它仍然没有显示任何结果。我知道日志文件包含此错误的事实。

我也尝试过:

$chan1->exec("find /apps/appName/loc/Logs/server/ -type f -exec grep 'CVS Call' '{}' \\; -print");

我使用此命令获得相同的结果,只使用一个单词找到工作,只要我添加第二个单词,它就不会显示任何结果。

有没有人知道为什么当我在grep搜索中添加一个空格时它找不到任何东西。

1 个答案:

答案 0 :(得分:1)

问题可能与所需的几个引用级别有关。手动操作非常困难。

如果你在Linux / Unix机器上,可以使用Net::OpenSSH为你做引用:

 my $ssh = Net::OpenSSH->new($host, user => $user, password => $password);
 my @lines = $ssh->capture('find', $logs_dir,
                           '-type', 'f',
                           '-exec', 'grep', '-q', $string, '{}', ';',
                           '-print');

 for (@lines) {
     ...
 }