我有awk命令,我想包装在system()中。
std::string cmd = "awk -F\| '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());
将错误视为,
错误:未知转义序列' \ |'
我试过用不同的方式给出引号。但是,没有任何帮助。
答案 0 :(得分:2)
您只需要转义\
:
std::string cmd = "awk -F\\| '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
//-----------------------^
当您创建C ++字符串时,\
被视为转义字符,除非您将其转义。
或者在这种情况下,您可以引用分隔符,避免转义它:
std::string cmd = "awk -F'|' '{ print $2, $5 }' 1.txt";
我认为你的剧本可能比现实中更复杂,但无论如何我都会为你简化,以防万一。
最后一个选项,使用原始字符串文字(在C ++ 11中受支持):
std::string cmd = R"awk -F\| '{ print $2, $5 }' 1.txt";
R
前缀表示\
不再被解释为转义字符。
答案 1 :(得分:0)
也许是在-F" |"引号??
std::string cmd = "awk -F\"|\" '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());