"未知的逃脱序列"在C程序中使用sed时发出警告

时间:2016-10-25 07:32:57

标签: c linux sed escaping

我想使用sed命令从源字符串中提取目标字符串。

如果该命令在Linux shell中执行,则效果很好。这是一个例子,

echo A=B | sed -e 's/.*=\(.*\)/\1/'

此命令在" ="之后提取字符串,其结果为字符串" B"。

但是,如果从C程序调用此命令,例如

popen("echo A=B | sed -e 's/.*=\(.*\)/\1/'", "r")

编译时会显示警告消息{"warning: unknown escape sequence: '\)'}

有几个答案建议在'\)'之前添加反斜杠,但在这种情况下它不起作用。有谁知道如何解决这个问题?

P.S。通过在所有' \'之前添加反斜杠,将代码引导至popen("echo A=B | sed -e 's/.*=\\(.*\\)/\\1/'", "r"),它可以正常工作。
然而,结果是" B \ n"而不是" B",有没有办法删除后缀" \ n"?

1 个答案:

答案 0 :(得分:1)

嗯,问题是你必须加倍转义字符\才能在字符串中产生真正的转义,所以你必须写:

popen("echo A=B | sed -e 's/.*=\\(.*\\)/\\1/'", "r");