'sed' 命令不适用于 Java 脚本

时间:2021-01-28 12:37:47

标签: javascript shell sed

我想使用 Javascript 执行选项表单执行以下 Shell 命令:

"sed -i 4r<(sed '1,5!d' /etc/wpa_supplicant/wpa_template.template) /etc/wpa_supplicant/wpa_supplicant.conf"

然后我在 shell 控制台中尝试这个命令,它完美地工作。但是在使用 .js 程序启动它之后,什么也没有发生。我只想复制模板中的前 5 行并将它们添加到配置文件中。

2 个答案:

答案 0 :(得分:0)

您可以使用 exec 中的 child_process

const exec = require('child_process').exec
exec("sed -i 4r<(sed '1,5!d' /etc/wpa_supplicant/wpa_template.template) /etc/wpa_supplicant/wpa_supplicant.conf", (err, stdout, stderr) => {
    if (err) {
       return console.error(err)
    }
    console.log(`stdout: ${stdout}`)
    console.log(`stderr: ${stderr}`)
})

答案 1 :(得分:0)

您可以使用以下代码来执行任何 shell 命令,并在每次运行时将 o/p 替换为一个新文件(创建一个新文件)。并且,您应该使用 line-reader 模块从文件中获取行。

npm install --save line-reader
const fs = require('fs');
const lineReader = require('line-reader');
const { exec } = require('child_process');
const cmd = "sed -i 4r<(sed '1,5!d' /etc/wpa_supplicant/wpa_template.template) /etc/wpa_supplicant/wpa_supplicant.conf"

exec(cmd, (err, stdout, stderr) => {
  if (err) {
    //some err occurred
    console.error(err)
  } else {
   // the *entire* stdout and stderr (buffered)
   fs.writeFile('file path', stdout, (err) => {
    // throws an error, you could also catch it here
    if (err) throw err;
    // success case, the file was saved
    console.log('file saved');
    readFile1();
  });
  }
});

const readFile1 = () => lineReader.eachLine('file path', function(line) {
  //make logic to take number of lines you want to take.
  console.log(line);
});
相关问题