AWK命令在nodejs内失败

时间:2018-04-12 14:20:38

标签: node.js shell awk sed wget

我正在尝试在nodejs的子进程exec中运行以下命令,但它失败了:

    +-----------------+-----------------+-----------------+
    |             Time|TimeStamp        |            mean |
    +-----------------+-----------------+-----------------+
    |       Some date |            41526|23.32            |
    |       Some date |            41536|43.22            |
    |       Some date |            41546|54.32            |
    |

我从shell脚本测试了命令,它运行得很好。但是,当我从nodejs运行它时,它会给出以下错误:

wget -qO- some.website | awk -F \"</*TD ALIGN=LEFT>|</*TD>|<*/A>\" \'/<TD ALIGN=LEFT>.*[A-Z]/ {print $12}\' | sed -n 1p

请帮忙。

编辑:

/bin/sh: TD: No such file or directory

configs.command有我传递的命令

EDIT2:

var reportTCC = function() {
     let child = exec(configs.command, function(error, stdout, stderr) {
         if (error !== null) {
             log.error('Error executing the command to retrieve Run Info: ' + error);
             stdout = "UNKNOWN"
         }
         let run_type = stdout;
     });
 };

1 个答案:

答案 0 :(得分:1)

由于您的转义字符已传递到ssh命令,因此您很可能不需要转义awk个参数。基于您的ssh使用单引号的事实,例如:

ssh -t user@domain 'command to invoke'

使用双引号将您的参数包装在这些单引号内(因此请使其保持一致,如在您的第一个示例中,您将两者都混合在一起)。另见:How to escape a double quote inside double quotes?

如果您不确定如何调用该命令,请调用set -x shell命令输出跟踪消息,或运行以下命令:

ssh -t user@domain bash -x -c 'command to invoke'

另一个建议是不要使用awk和正则表达式来解析HTML,而是使用相关工具,例如:pupxpuphtml-xml-utils。请参阅:About parsing html and extract data using shell