西海岸より

つらつらざつざつと

PHPによる簡易GREP

特定の正規表現にマッチしたファイル名と該当行のみ表示、
ということがwindowsで手軽にできなかったので、簡単にPHPで書いたときのメモ。
Perl正規表現が使えるので、流用がきくはず。

  • grepFiles.php
<?php

    if ($argc != 3) {
	    print "usage:  php grepFiles \"[file-name]\" \"[regex]\" \n";
		print "   (ex) php grepFiles \"*.txt\" \"/^Hello/\" \n";
		exit(1);
	}
    $target = $argv[1];
	$regex = $argv[2];

    if (@preg_match($regex, $regex) == FALSE) {
	    print "Regex error. => $regex \n";
		exit(2);
	}

    foreach (glob($target) as $file_name ) {
        checkOneFile($file_name, $regex);
    }
		
    //check one file
    function checkOneFile($file_name, $regex){
        $textAry = file($file_name);
        $lines = "";
        foreach($textAry as $key => $line){
            if (
                preg_match($regex, $line)
            ) {
                $lines .= $line;
            }
        }
        if($lines == "")return;
        print "-- " . $file_name . " --\n";
        print $lines;
    }
?>
  • 使い方
usage:  php grepFiles "[file-name]" "[regex]" 
   (ex) php grepFiles "*.txt" "/^Hello/" 

実行例

  • test.txt
hello world
こんにちは世界
good bye
  • test2.txt
hoge
fuga
  • 実行結果
> php grepFiles.php "*.txt" "/good/"
-- test.txt --
good bye