gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:59 25 4
gpt4 key购买 nike

我试图删除日志文件中的一些特殊行,所以我在嵌入式 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");

当执行 a.out 时,我收到错误信息:

sed: unmatched '/'

我的“system()”调用有什么问题?我完全是文本处理的新手,所以任何人都可以给我一些线索吗?谢谢。

最好的问候,德君尔

最佳答案

直接我可以看到 [ 之前的\将被 'C' 吞没

所以你需要加倍,

system("sed\"/$MODULE\\[/d\"日志文件");

但是外壳可能想吞掉剩下的那个,再吞下那个,所以再加倍

system("sed\"/$MODULE\\\\[/d\"日志文件");

当然是系统("sed\"/$MODULE\\[/d\"日志文件");不能确定我正在阅读你提出的问题。尝试使用 echo 而不是 sed 并对其进行调整,直到字符串按照您希望 sed 看到的方式出现。

关于c - sed 命令在 shell 终端下工作正常,但在 C 代码下的 'system()' 调用中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com