2013-05-07 5 views
1

Good Day All У меня возникла проблема с получением этой команды для работы на кнопке нажмите Мне нужно выполнить поиск по файлу и вывести результаты в текст с разделителями-запятыми. PHP, похоже, не похож на фигурные скобки, так что, насколько я мог читать, мне нужно использовать exec(), но безрезультатно, поскольку ошибка, которую я получаю, - это «синтаксическая ошибка, неожиданный T_LNUMBER, ожидающий T_VARIABLE или« $ »» I Я все еще новичок в php, поэтому извините, если ответ очевиден! Любая информация будет полезна, спасибоИспользование команды Linux awk в php

<html> 
<body> 
<h1>Linux Command Test</h1> 

<form method="POST" action=""> 
<input type="submit" id="submit" name="submit" value="Submit"/> 
</form> 

<?php 
if (isset($_POST['submit'])) 
    { 
    $output = exec('grep -i hello test.txt | awk -v OFS=, '{\$1=\$1;print}' > newtest.txt'); 
    echo "<pre>$output</pre>"; 
    } 
?> 


</body> 
</html> 
+0

Показать свой код PHP. – Barmar

+0

Не можете ли вы просто написать эквивалентный код непосредственно на PHP, вместо того, чтобы обходить awk? – Barmar

+0

Я надеялся сделать это, но, видя, что мои навыки в Google не так хороши, как я надеялся, я возвращаюсь к своему опыту работы с Linux. – kirchner20

ответ

3
$output = exec('grep -i hello test.txt | awk -v OFS=, '{\$1=\$1;print}' > newtest.txt'); 

должно быть:

$output = exec('awk -v OFS=, \'/hello/i {$1=$1;print}\' test.txt > newtest.txt'); 

Вы должны бежать кавычки, в противном случае они разграничивают PHP строку. Вам не нужно избегать $ внутри строк с одной кавычкой в ​​PHP. Вы не должны перенаправлять вывод awk в файл, если хотите его записать в переменной PHP.

И нет необходимости трубить grep до awk, так как awk имеет встроенный шаблон.

+0

Спасибо, это помогает, но теперь весь файл разделен запятой, поэтому я использую grep, чтобы отфильтровать все строки со словом hello в нем. Спасибо – kirchner20

+0

Ваша команда 'grep' обрабатывает ТОЛЬКО строки с приветствием в ней. Если вы хотите отфильтровать их, это должно быть 'grep -v'. И весь смысл 'OFS =,' состоит в том, чтобы сделать его разделенным запятой. – Barmar

+0

Я вернул выходное перенаправление. 'exec()' возвращает только последнюю строку вывода, если вы хотите захватить все в переменной PHP, вам нужно передать необязательный второй аргумент, который представляет собой переменную, содержащую массив, который будет заполнен каждой строкой выход. – Barmar

0

Есть куча функций, которые вы можете использовать в PHP для вызова внешних приложений, exec(), system() и т.д.: http://www.php.net/manual/en/ref.exec.php но виду, что это до администратора, чтобы использовать их. На большинстве общих хостингов эти функции отключены

+0

Это не похоже на его проблему. Кажется, у него проблема со строчной интерполяцией. – Barmar

3

попытка побега за $

grep -i hello test.txt | awk -v OFS=, '{\$1=\$1;print}' > newtest.txt 
+0

Я пробовал экранирование, но потом получаю другие ошибки, я пробовал исключать hellargs() и excludeshellcmd(), все та же ошибка. После ускорения ошибка является синтаксической ошибкой, «неожиданным» {'". Спасибо за вход! – kirchner20

+0

Можете ли вы показать полный код php, который вы используете? – timstermatic

+0

@wiseguyonly - код отправлен, спасибо – kirchner20

Смежные вопросы