使用node.js从文件返回搜索文本的行

时间:2018-12-25 15:08:57

标签: javascript node.js fs

我正在使用fs读取文件的内容,然后在该文件中搜索特定的单词,如果该文件包含该单词而不是返回布尔值或该单词,则我希望输出包含关键字的行。如何输出整行?

const fs = require("fs");
let file = fs.readFileSync("read.txt", "utf8");
if(file.indexOf("keyword") >= 0) {
    console.log("Line of the keyword");
}

如果该行包含关键字,我只希望console.log()输出该行。

2 个答案:

答案 0 :(得分:5)

让我们首先尝试用新行将文件中的字符串分割开。然后可以在结果数组中搜索关键字的出现。如果搜索成功,则打印与行号相同的数组索引。

const fs = require("fs");
let file = fs.readFileSync("read.txt", "utf8");
let arr = file.split(/\r?\n/);
arr.forEach((line, idx)=> {
    if(line.includes("keyword")){
    console.log((idx+1)+':'+ line);
    }
});

答案 1 :(得分:0)

我知道您只是想注销结果,但是看到另一种方法可能会很有趣,该方法包括写入文件以及使用设计用于逐行读取文件的软件包。将来可能会有所帮助。

linebyline npm package

const readline = require("linebyline");
const fs = require('fs');

const rl = readline('sample.txt');

rl.on('line', function (line, lineCount, byteCount) {

  console.log(lineCount);  // this is not zero-based

  // do something with the line of text
  // line = line.substr(3).substr(0, 9); or whatever

  if (line.includes("yourSearchWord") {
    fs.appendFileSync('modified.txt', lineCount + ":" + line + '\n');
    // or console.log(lineCount + ":" + line);
  }
});

rl.on('error', function(e) {
  // something went wrong
});