我无法弄清楚如何让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);
。
我错过了什么?
答案 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);