2015-07-12 3 views
0

Я использую следующую команду, чтобы перенаправить вывод СЭД в TMP файла:перенаправлять вывод СЭД (по трубопроводу из Grep) в файл в программе C

grep --include=*.txt -A 3 -rnw abx/ -F -e 'simple' | sed -n 's#.*/\([^/]*\.txt\).*"\([^"]*\)*"[[:space:]]*,[[:space:]]*/\*[[:space:]]*col[[:space:]]*\*/#\1\n\2#p' > tmp 

Выход перенаправляется в TMP если он используется в терминале, но в программе C, ничего не записывается в 'tmp'.

Программа C:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() { 
    char cmd[1028]; 

    strcpy (cmd, "grep --include=*.txt -A 3 -rnw abx/ -F -e 'simple' | sed -u -n 's#.*/\\([^/]*\\.txt\\).*\"\\([^\"]*\\)*\"[[:space:]]*,[[:space:]]*/\\*[[:space:]]*col[[:space:]]*\\*/#\\1\\n\\2#p' > tmp"); 

    system (cmd); 
    return 0; 
} 

РЕДАКТИРОВАТЬ: Пример текстового файл:

simple = 
"sik", /* fill */ 
"trauma", /* type */ 
"hui", /* col */ 

Этот файл хранятся в ABX /.

+3

вы можете распечатать строку, чтобы увидеть, что вы делаете. Вы также можете проверить возвращаемое значение системного вызова. – mch

+0

Возврат системного вызова равен 0. Я отредактировал вопрос. – Shahzad

+0

Возможный дубликат [перенаправление вывода на файл в C] (http://stackoverflow.com/questions/8516823/redirecting-output-to-a-file-in-c) – Cyrus

ответ

0

Возможно, вам понадобится «двойной побег» в «\» в вашем регулярном выражении.

([^/]*\\.txt\\) --> ([^/*\\\\.txt\\\\) 

Как C изменит «\ \» на «\», когда он строит строку, и я думаю, что CMD также изменится «\ \» на «\».

+0

Они уже экранированы, поскольку они находятся в строке. – Shahzad

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