sed命令在shell终端下工作正常,但在';系统();用C代码调用

sed命令在shell终端下工作正常,但在';系统();用C代码调用,c,sed,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

我试图删除日志文件中的一些特殊行,所以在嵌入式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).
  • 在shell下执行以下命令,一切正常:

    export MODULE=sshd
    sed "/$MODULE\[/d" logfile
    
  • 但如果我尝试使用以下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");
    
  • 执行a.out时,我收到错误消息:

    sed: unmatched '/'
    
    我的“system()”调用有什么问题?我在文本处理方面完全是个新手,所以有人能给我一些线索吗?谢谢

    致以最良好的祝愿,
    dejunl

    我马上就能看到,[之前的\将被'C'吞没

    所以你需要加倍努力

    系统(“sed\”/$MODULE\\[/d\“日志文件”)

    但是贝壳可能想吞下剩下的那一个吞下那一个再把它翻一番

    系统(“sed\”/$MODULE\\\\[/d\“日志文件”)


    当然是系统(“sed\”/$MODULE\\[/d\“日志文件”);无法确定我是否正在阅读您提出的问题。请使用echo而不是sed进行尝试,并调整它,直到字符串显示为您希望sed看到的字符串。

    是否需要使用
    strcat
    +
    而不是包含$MODULE?我想在sed命令中使用env变量,使用'strcat'可以解决此问题?为什么要包装您的C程序中的ed命令?小心使用
    putenv()
    ;它使用您在环境中提供的(本地)变量,这往往会导致问题。确保该变量具有足够长的生存期(
    static char env_str[64]=”;
    )或改用
    setenv()
    setenv(“MODULE”,MODULE_str,1);
    ).1.对于Ed Morton来说,上面的代码只是我整个应用程序中用C编写的一个片段,我正在嵌入式系统上实现一个处理日志文件的模块。PS,谢谢你的好格式。哦,天哪,我的系统崩溃了,我现在无法启动,我稍后会尝试你的方法。谢谢你的回答。@JasenI在R(命令在终端工作,但在被
    system()
    调用时不起作用),这为我解决了这个问题!!!谢谢!