你在當地的圖書館找到了一份工作,幫忙整理館藏的老書。學生讀者常常為了寫學期報告,想引用一些印象已經模糊的句子。與其一本一本從頭到尾手動翻閱,你決定做個小工具來掃描這些書,找出這些片段的句子。
在檔案中搜尋符合搜尋字串的行,並回傳所有符合的行。
Unix 的grep指令會在檔案中搜尋符合正規表示式的行。你的任務是實作一個簡化的 grep 指令,支援搜尋固定字串。
grep 指令接受 3 個引數:
接著它會讀取指定檔案的內容(依照指定的順序),找出包含搜尋字串的行,最後依照找到的順序回傳這些行。在多個檔案中搜尋時,每個符合的行前面會加上檔名和一個冒號(':')。
grep 指令支援下列旗標:
-n 在輸出的每一行前面加上行號和一個冒號(':'),行號放在檔名之後(如果有檔名的話)。-l 只輸出至少包含一行符合內容的檔案名稱。-i 使用不分大小寫的比較來比對。-v 反轉程式,收集所有不符合的行。-x 只搜尋整行都與搜尋字串完全相符的行。和其他練習不同,測試檔grep.spec.js_不會_匯入grep.js。相反地,它會像執行檔一樣被使用。為了方便做到這點,grep.js已經設定好 shebang,並附上一段說明其用途的註解:
#!/usr/bin/env node
// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)
測試會啟動一個新的 node 處理程序,在其中執行grep.js。
想取得啟動_處理程序_時所用的引數,請使用process.argv。
我們已經提供readLines函式,使用它時不需要轉換檔案路徑。readlines函式會從目前的工作目錄_解析_路徑,而對grep.js處理程序來說,工作目錄會設定成練習目錄。
要寫入輸出,請使用
console.log寫入標準輸出串流,console.error寫入標準錯誤串流。如果標準錯誤串流沒有寫入任何內容,測試就會判定執行成功(resolved);只要標準錯誤串流有寫入內容,就會判定執行不成功(rejected)。