用sed执行失败

时间:2016-12-17 00:29:57

标签: c sed

我正在创建一个小的unix shell,execve与sed存在问题。当我执行sed -e 's/Roses/Turnips/'时,命令以execve失败。

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>

int main(int ac, char **av, char **envp)
{
    char *argv[] = { "/usr/bin/sed", "-e", "'s/Roses/Turnips/'", 0 };
    execve(argv[0], &argv[0], envp);
    fprintf(stderr, "Failed!\n");
    return -1;
}

错误:

/usr/bin/sed: -e expression #1, char 1: unknown command: `''

2 个答案:

答案 0 :(得分:1)

摆脱s///参数周围的单引号。这些是shell语法的一部分,而不是sed语法。

char *argv[] = { "/usr/bin/sed", "-e", "s/Roses/Turnips/", 0 };

execve直接执行程序,它不使用shell。每个参数都是字面上发送给程序的,因此在shell中运行程序时不需要转义或引用。

答案 1 :(得分:0)

问题出现在sed内部,因为它不需要你的单引号。 您在shell中使用这些单引号来阻止它解释sed命令,但shell最终会删除这些引号,这也是您需要做的。