2012-05-19 21 views
7

PHP'de unix/linux sistemlerinde grep -f dosya adı veren bir işlev var mı. Hiçbiri yoksa, PHP işlevleri/araçları bunun için özelleştirilmiş bir yöntem/işlev oluşturmaya yardımcı olur. Teşekkürler!grep with -f gibi PHP'de

cevap

9

Aslında IMHO, ben aşağıdaki söyleyebilirim:

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

preg_grep­Docs ve file­Docs bakınız. Eğer dosya kümesi üzerinde ki (yinelemeli) yapmak gerekirse

, ayrıca glob ve foreach ya da (Recursive) DirectoryIterator veya GlobIterator­Docs değil RegexIterator­Docs unutmak yoktur.


Örnek SplFileObject veRegexIterator ile:

$stream = new SplFileObject($file); 
$grepped = new RegexIterator($stream, $pattern); 

foreach ($grepped as $line) { 
    echo $line; 
} 

Çıkış ($ deseni içeren $file her hat):

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

Gösteri: https://eval.in/208699

+0

Bu işlev eşdeğer olsa da, komut satırı grep'i değil, tüm dosyayı belleğe yükler. – cmc

+0

@ cmd: Evet, hafızayı kaydetmek istiyorsanız, lütfen [** SplFileObject **] (http://php.net/SplFileObject) ve [** RegexIterator **] (http://php.net/ RegexIterator). – hakre

+0

iyi geliyor! ... elinizde preg_grep ($ pattern, file ($ path)) için bir yer değiştirme yedeği olan bir örnek olmaz mı? – cmc

2

file_get_contens() işlevini, bir dosyayı ve bir regex kullanarak içerikleri yakalamak için preg_match_all() işlevini açabilirsiniz.

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

'file_get_contents()' ı kullanıyorum ama aralıklı olarak başarısız oluyor. – FractalSpace