我想使用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"?
答案 0 :(得分:1)
嗯,问题是你必须加倍转义字符\
才能在字符串中产生真正的转义,所以你必须写:
popen("echo A=B | sed -e 's/.*=\\(.*\\)/\\1/'", "r");