Javascript readline rl.write是如何工作的?

Javascript readline rl.write是如何工作的?,javascript,node.js,stream,readline,Javascript,Node.js,Stream,Readline,我试图解析一个文件,并用“bazbar”替换“foobar”行。它只返回一个空文件。我不知道我做错了什么,医生也没有特别的帮助 var readline = require('readline'); var fs = require('fs'); var rl = readline.createInterface({ input: fs.createReadStream('test/in.txt'), output: fs.createWriteStream('test/out.txt

我试图解析一个文件,并用“bazbar”替换“foobar”行。它只返回一个空文件。我不知道我做错了什么,医生也没有特别的帮助

var readline = require('readline');
var fs = require('fs');

var rl = readline.createInterface({
  input: fs.createReadStream('test/in.txt'),
  output: fs.createWriteStream('test/out.txt', {
    flags: 'r+'
  })
});

rl.on('line', function (line) {
  if (line.match(/foobar/)) {
    rl.write(line.replace(/foo/, 'baz'));
  }
});

这是tmp回购协议,如果有人对它感兴趣的话:

这可能不能回答你的问题,但它完成了任务

我无法使用
rl.write
来处理文件
WriteStream
,但我确实是通过直接写入文件
WriteStream
来实现的。代码如下:

var readline = require('readline');
var fs = require('fs');

var ws = fs.createWriteStream(__dirname + '/test/out.txt', { flags: 'r+', defaultEncoding: 'utf8' })

var rl = readline.createInterface({
  input: fs.createReadStream(__dirname + '/test/in.txt')
});

rl.on('line', function (line) {
  if (line.match(/foobar/)) {
    line = line.replace(/foo/, 'baz');
  }
  ws.write(line + '\n');
});

rl.on('close', function() {
  ws.close()
})
编辑:
rl.write
将只写入
TTY
查看,节点正在检查
output
中提供的流是否是终端。如果是,它将写入流,如果不是,它看起来将作为
line
事件重新发出写入

这意味着您必须欺骗
readline
模块,使其认为您的
fs.WriteStream
实际上是一个TTY。下面是一些有效的更新代码。注意第5行添加了一个
isTTY
属性,并将其设置为
true

var readline = require('readline');
var fs = require('fs');

var ws =  fs.createWriteStream(__dirname + '/test/out.txt', { flags: 'r+', defaultEncoding: 'utf8' })
ws.isTTY = true

var rl = readline.createInterface({
  input: fs.createReadStream(__dirname + '/test/in.txt'),
  output: ws
});

rl.on('line', function (line) {
  var ln
  if (line.match(/foobar/)) {
    ln = line.replace(/foo/, 'baz')
  }
  rl.write(ln, '\n')
});

太好了,谢谢你。现在,我想知道如何替换该行,而不是在其下面追加一行。他们的文档说
rl.write(null,{ctrl:true,name:'u'})
应该删除该行,但它只是用大量奇怪的符号淹没了文件。你知道有没有更好的方法吗?也许只是解析整个文件并替换一些东西?Nvm我用这个得到了它。再次感谢您的帮助。=)