grep没有返回所有匹配的行

时间:2016-03-05 19:52:48

标签: php grep exec

我无法弄清楚如何让grep返回文件中找到的所有行。它计算正确的数字,但只打印最后一个匹配。

$found = array();
$term = escapeshellarg(self::$term);
foreach(self::$files as $file)
{
    if($count = exec("grep -i -c ".$term." ".$file))
    {
        $lines = exec("grep -i -n ".$term." ".$file);
        $found[] = array('count'=>$count,'lines'=>$lines,'file'=>str_replace(self::$dir, '', $file));
    }
}
self::$files = $found;

我们说self::$term = 'console.log'。它在一个特定文件中找到三个匹配项,这是正确的(该术语显示在测试文件的第16,21和31行),但$lines仅打印:31: console.log(response);

我错过了什么?

2 个答案:

答案 0 :(得分:1)

php manual获取exec:

  

返回值

     

命令结果的最后一行。如果你需要执行一个   命令并将命令中的所有数据直接传回   没有任何干扰,请使用passthru()函数。

所以你只得到grep找到的最后一个匹配,因为它是最后一行输出。

答案 1 :(得分:1)

我希望这会有所帮助。

$result = array();
exec("grep '"$yourstring"' ./update.php  |  cut -d':' -f1 | sed -e 's/^[ ]*//'", $result);
print_r($result);