Использование оболочки для этого не очень хороший подход. PHP уже имеет функции, которые могут сделать это. Я бы использовал preg_match_all
и file_get_contents
. Предполагается, что файл не очень большой, поэтому может потребоваться fread
.
$words = $_GET['word'];
$words = explode(' ',$words);
$words = implode('|',$words);
$file = file_get_contents('/home/jitu/data.txt');
preg_match_all('/^.*\b(' . $words . ').*$\b/m', $file, $search);
foreach($search[0] as $line){
echo '<p>'.$line.'</p>';
}
Я также добавил границы слов в ваше регулярное выражение, чтобы отдельные слова не совпадали. Модификатор m
- это совпадение ^$
для каждой строки, а не для всего файла. .*
означает, что все до / после матча будет записано. Если вы просто хотите узнать, какие термины совпали, можно использовать $search[1]
.
Дополнительное примечание: пользовательский ввод никогда не должен передаваться непосредственно в оболочку.