【发布时间】:2015-05-11 09:18:58
【问题描述】:
我有想要在 system() 中包装的 awk 命令。
std::string cmd = "awk -F\| '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());
得到错误,
错误:未知转义序列'\|'
我尝试过以不同的方式给出引号。但是,没有任何帮助。
【问题讨论】:
我有想要在 system() 中包装的 awk 命令。
std::string cmd = "awk -F\| '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());
得到错误,
错误:未知转义序列'\|'
我尝试过以不同的方式给出引号。但是,没有任何帮助。
【问题讨论】:
你只需要转义\:
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 前缀意味着\ 不再被解释为转义字符。
【讨论】:
可能会忽略 -F"|"引号??
std::string cmd = "awk -F\"|\" '{ var1=$2; var2=$5; print var1, var2 }' 1.txt";
system(cmd.c_str());
【讨论】: