Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Вопрос по execl


Автор: mikee 12.3.2011, 15:16
мне нужно выполнить вот это egrep -o "\b\w{argv[2]}\b" argv[1]
для это 
Код
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
execl("/usr/bin/egrep","egrep","-o","\"\\b\\w{",argv[2],"}\\b\"",argv[1],(char*)0);
exit(0);
}

но почему то не работает

Автор: borisbn 12.3.2011, 17:38
смотри, у тебя получается, что execl формирует такую строку
egrep -o "\b\w{ x,y }\b"
а должна быть такая
egrep -o "\b\w{x,y}\b"
т.е. между фигурной скобкой и argv[2] вставляется пробел, а такое выражение и не должно работать.

как избавиться:
std::string regStr = std::string( "\"\\b\\w{" ) + argv[2] + "}\\b\"";
а потом подавай её execl'ю
Код

execl("/usr/bin/egrep","egrep","-o", regStr.c_str(), argv[1],(char*)0);


Автор: TIT 14.3.2011, 09:47
А лучше воспользуйся средствами Си, а не внешними программами.
Например, http://pubs.opengroup.org/onlinepubs/007908799/xsh/regex.h.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)