2012-05-19 17 views
7

क्या PHP में ऐसा कोई फ़ंक्शन है जो यूनिक्स/लिनक्स सिस्टम में grep -f फ़ाइल नाम करता है। यदि कोई नहीं है, तो PHP फ़ंक्शन/टूल इसके लिए एक अनुकूलित विधि/फ़ंक्शन बनाने में सहायता करेंगे। धन्यवाद!grep के साथ PHP में

उत्तर

9

असल IMHO, मैं कहेंगे यह निम्नलिखित है:

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

preg_grep­Docs और file­Docs देखें।

आप फ़ाइलों का एक सेट से अधिक है कि (रिकर्सिवली) क्या करने की जरूरत है, वहाँ भी glob और foreach या (Recursive) DirectoryIterator या GlobIterator­Docs और RegexIterator­Docs भूल जाते हैं नहीं है।


SplFileObject और RegexIterator साथ उदाहरण:

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

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

आउटपुट ($file के सभी लाइनों $ प्रतिमान):

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

डेमो: https://eval.in/208699

+0

हालांकि यह कार्यात्मक रूप से समकक्ष है, यह पूरी फ़ाइल को स्मृति में लोड करता है, जबकि कमांड लाइन grep नहीं करता है। – cmc

+0

@cmd: हाँ, अगर आप स्मृति को सहेजना चाहते हैं, तो कृपया [** SplFileObject **] (http://php.net/SplFileObject) और [** RegexIterator **] (http://php.net/ पर विचार करें) RegexIterator)। – hakre

+0

अच्छा लगता है! ... आपके पास ऐसा उदाहरण नहीं होगा जो preg_grep ($ पैटर्न, फ़ाइल ($ पथ)) के लिए ड्रॉप-इन प्रतिस्थापन है? – 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); 
+0

मैं 'file_get_contents()' का उपयोग कर रहा हूं लेकिन यह अंतःस्थापित हो जाता है। – FractalSpace