将sed的输出(从grep传送)重定向到C程序中的文件

时间:2015-07-12 09:59:36

标签: c sed pipe

我使用以下命令将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 /.

1 个答案:

答案 0 :(得分:0)

你可能需要&#34;双重逃避&#34; &#34; \&#34;在你的正则表达式中。

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

因为C会改变一个&#34; \ \&#34;到了&#34; \&#34;当它构建字符串时,我认为cmd也会改变&#34; \ \&#34;到&#34; \&#34;。