【问题标题】:grep with -f like in PHPgrep 与 -f 类似在 PHP
【发布时间】:2012-05-19 08:26:58
【问题描述】:

PHP 中是否有这样的函数在 unix/linux 系统中执行 grep -f 文件名。 如果没有,哪些 PHP 函数/工具将有助于为此创建自定义方法/函数。谢谢!

【问题讨论】:

    标签: php grep


    【解决方案1】:

    实际上恕我直言,我想说的是:

    $result = preg_grep($pattern, file($path));
    

    请参阅 preg_grep­Docsfile­Docs

    如果您需要(递归地)对一组文件执行此操作,还有 globforeach 或 (Recursive)DirectoryIteratorGlobIterator­Docs 并且不要忘记 @987654325 @。


    SplFileObjectRegexIterator 的示例:

    $stream = new SplFileObject($file); 
    $grepped = new RegexIterator($stream, $pattern); 
    
    foreach ($grepped as $line) {
        echo $line;
    }
    

    输出($file 的所有行包含 $pattern):

    $grepped = new RegexIterator($stream, $pattern); 
    foreach ($grepped as $line) {
        echo $line;
    }
    

    演示:https://eval.in/208699

    【讨论】:

    • 虽然这在功能上是等效的,但它确实会将整个文件加载到内存中,而命令行 grep 则不会。
    • @cmd:是的,如果你想节省内存,请考虑SplFileObjectRegexIterator
    • 听起来不错! ...您不会碰巧手头有一个替代 preg_grep($pattern, file($path)) 的示例?
    • @cmc:请参阅我在答案中添加的内容,它显示了这样一个示例。
    【解决方案2】:

    您可以结合使用file_get_contens() 函数打开文件和preg_match_all() 函数使用正则表达式捕获内容。

    $file = file_get_contents ('path/to/file.ext');
    preg_match_all ('regex_pattern_here', $file, $matches);
    print_r ($matches);
    

    【讨论】:

    • 我一直在使用file_get_contents(),但它会间歇性地失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多