sed命令在shell终端下工作正常,但在C代码下的'system()'调用失败

时间:2013-02-03 09:18:34

标签: c sed

我正在尝试删除日志文件中的一些特殊行,所以我在嵌入式linux系统上使用了busybox的sed。

# sed
BusyBox v1.18.4 (2013-01-16 16:00:18 CST) multi-call binary.

Usage: sed [-efinr] SED_CMD [FILE]...

Options:
        -e CMD  Add CMD to sed commands to be executed
        -f FILE Add FILE contents to sed commands to be executed
        -i      Edit files in-place (else sends result to stdout)
        -n      Suppress automatic printing of pattern space
        -r      Use extended regex syntax

If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).
  1. 在shell下执行以下命令,一切正常:

    export MODULE=sshd
    sed "/$MODULE\[/d" logfile
    
  2. 但如果我尝试使用以下C代码来完成此任务:

    char logfile[] = "logfile";
    char module_str[] = "sshd";
    char env_str[64] = {0};
    int offset = 0;
    
    strcpy(env_str, "MODULE=");
    offset += strlen("MODULE=");
    strcpy(env_str + offset, module_str);
    putenv(env_str);
    system("sed \"/$MODULE\[/d\" logfile");
    
  3. 执行a.out时,收到错误消息:

    sed: unmatched '/'
    

    我的'system()'电话有什么问题?我完全是文本处理的新手,所以任何人都可以给我一些线索?感谢。

    祝你好运, dejunl

1 个答案:

答案 0 :(得分:1)

直接关闭我可以看到[之前被'C'吞噬的\

所以你需要加倍,

system(“sed \”/ $ MODULE \\ [/ d \“logfile”);

但是shell可能想要吞下一个那个可以吞下它的那个再次加倍的那个

system(“sed \”/ $ MODULE \\\\ [/ d \“logfile”);

当然是system(“sed \”/ $ MODULE \\ [/ d \“logfile”);不能确定我在读你提出的问题。尝试使用echo而不是sed并调整它直到字符串出来,因为你想要sed看到它。