我正在使用以下命令从文件中删除已注释的空行并搜索特定模式。
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中使用它。
答案 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:]]。