我使用以下命令将sed的输出重定向到tmp文件:
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 /.
中答案 0 :(得分:0)
你可能需要&#34;双重逃避&#34; &#34; \&#34;在你的正则表达式中。
([^/]*\\.txt\\) --> ([^/*\\\\.txt\\\\)
因为C会改变一个&#34; \ \&#34;到了&#34; \&#34;当它构建字符串时,我认为cmd也会改变&#34; \ \&#34;到&#34; \&#34;。