Использование grep с execl ()

Небольшой контекст для моего проекта: у нас есть произвольное количество файлов, которым требуется отдельный процесс для каждого файла, а затем необходимо выполнить поиск с помощью вызова exec (), чтобы найти каждый раз, когда используется определенный KEY. Я знаю, как использовать grep из командной строки с помощью этой команды:

grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt

Но я не могу понять, как это сделать в C ++. Я нашел здесь ветку, которая дала мне эту строчку.

execl("/bin/grep","grep",pattern,filename,NULL);

Он компилируется и запускается, так что я думаю, что это работает, но проблема в том, что мне нужно вывести количество раз, когда шаблон встречался в файле, и я попробовал строку ниже, но, как ожидается, это не сработало. Это выдало эту ошибку «grep: out.txt: Нет такого файла или каталога»

execl("/bin/grep", "grep",pattern,fileName,output,NULL);

Вот направления этой части моего проекта.

Вы можете сделать это с помощью
системный вызов exec (), предоставляющий ему путь к исполняемому файлу оболочки (обычно это / bin / sh)
и, в качестве аргументов / bin / sh, строка -c и строка, соответствующая команде поиска
(grep -o …).

Некоторое руководство здесь будет высоко ценится!

0

Решение

Для фактического выполнения, как вы бы сделали в командной строке:

 execl("/bin/sh", "/bin/sh", "-c", "grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt")

Это будет означать, что оболочка будет принимать линию grep -o KEY FILENAME.txt | wc -l > OUTPUT.txtинтерпретировать и запустить его. Обратите внимание, что это будет включать в себя расширение подстановочных знаков и все, что делает оболочка.

Тогда, конечно, если вы не хотите продолжать после его завершения, вам придется fork во-первых, потому что execl не возвращается, если он успешно запустил программу (т.е. bash).

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector