当我跑步时:
unzip -p /tmp/document.docx word/document.xml | sed -e 's/<\/w:p>/\\n/g; s/<[^>]\{1,\}>//g; s/[^[:print:]\n]\{1,\}//g'
它可以从我的.docx文件中正确提取文本。
但是当我尝试将其包装在Node.js程序中时,如下所示:
const spawn = require("child_process").spawn;
const command = "unzip"; ;
const child = spawn("sh", ["-c", "unzip -p /tmp/document.docx word/document.xml | sed -e 's/<\/w:p>/\\n/g; s/<[^>]\{1,\}>//g; s/[^[:print:]\n]\{1,\}//g'"]);
const stdout = child.stdout;
const stderr = child.stderr;
const output = "";
stderr.on("data", function(data) {
console.error("error on stderr", data.toString());
});
stdout.on("data", function(data) {
output += data;
});
stdout.on("close", function(code) {
});
我收到以下错误消息:
stderr sed出错:-e表达式1,字符10:`s'的未知选项
如何解决此错误?
答案 0 :(得分:1)
以这种方式在代码中使用命令行时,您必须考虑对node.js生成的\
的解释,并将反斜杠反斜杠反斜杠。一个用于node.js,一个用于sed命令。
spawn("sh", ["-c", "unzip -p /tmp/document.docx word/document.xml | sed -e 's/<\\/w:p>/\\\\n/g; s/<[^>]\\{1,\\}>//g; s/[^[:print:]\\n]\\{1,\\}//g'"])
看here
@ T.J人群
在JavaScript中,反斜杠在字符串中都有特殊含义 文字和正则表达式。如果您想要一个实际的反斜线 在字符串或正则表达式中,您必须编写两个:\。