在Node.js中,为什么我的spawn命令会产生错误?

时间:2019-03-06 10:41:21

标签: node.js

当我跑步时:

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'的未知选项

如何解决此错误?

1 个答案:

答案 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中,反斜杠在字符串中都有特殊含义   文字和正则表达式。如果您想要一个实际的反斜线   在字符串或正则表达式中,您必须编写两个:\。