如何防止c解释sed

时间:2013-03-14 06:56:11

标签: c sed

我正在使用以下命令从文件中删除已注释的空行并搜索特定模式。

sed '/#/d' $file | sed '/^[  ]*$/d' | tr -d '\n' | sed -n 's/^.*tags\s*[{]\s*hosttags\s*=\s*\([0-1]\)\s*[}].*/tags {hosttags = \1}/p'

虽然上面的表达式在shell中对我有用,但我必须在C中使用它。问题出在这一行。

sprintf(buf, "sed '/#/d' %s | sed '/^[  ]*$/d' | tr -d '\n' | sed -n 's/^.*tags\s*[{]\s*hosttags\s*=\s*\([0-1]\)\s*[}].*/tags {hosttags = \1}/p'",file);

C尝试解释\ s并编译失败。用[[:space]]替换\ s无法正常工作。 请告诉我如何在C中使用它。

2 个答案:

答案 0 :(得分:1)

加倍反斜杠,将\n更改为\\n,将\s更改为\\s,依此类推:

sprintf(buf, "sed '/#/d' %s | sed '/^[  ]*$/d' | tr -d '\\n' | sed -n 's/^.*tags\\s*[{]\\s*hosttags\\s*=\\s*\\([0-1]\\)\\s*[}].*/tags {hosttags = \\1}/p'",file);

当C {1}}出现在C字符串文字中时,会在字符串中嵌入一个反斜杠。

答案 1 :(得分:0)

将\ s替换为POSIX字符类[[:space:]]。