簡短的回答是:不。
較長的答案是:它取決於。
的甚至更長的答案是:grep的性能取決於很多事情:
- 你運行一個固定字符串搜索(-F,fgrep一樣)或不 - 這本身grep所使用博耶 - 穆爾算法無法找到正則表達式,所以grep做了什麼(或者至少是用來做)是它首先在你的正則表達式中找到一個固定的字符串,試圖在文本中使用BM找到它,並進行正則表達式匹配(不確定當前的實現是否使用了NFA或DFA的實現,可能是一個混合型)
- 多久是你的模式 - BM工作更長的模式
快
- 多少比賽會讓你有 - 比賽越少,速度就越快是
- 什麼是你的CPU和內存 - 僅在在計算時間看的不是
- 什麼其他選擇,你用硬盤驅動器將幫助您grep的
- 14小時甚至可能不是你的下界,因爲博耶 - 摩爾是足夠聰明,在計算其未來可能的匹配可能發生,因此並不需要讀入整個文件的偏移量。這確實取決於實施,但只是我的猜測。重新運行以下測試用更長的模式後,我才得以下井0.23sec,我不認爲我的磁盤是快。 但是可能會涉及一些緩存。
比如我在一個500MB/s的SSD運行(至少這是製造商說什麼)和grepping一個200MB的文件,在很短的模式(幾個字符)給我:
隨着808320
打
real 0m1.734s
user 0m1.334s
sys 0m0.120s
隨着0
點擊:
real 0m0.059s
user 0m0.046s
sys 0m0.016s
@Edit:在短閱讀Boyer-Moore :-)
@ EDIT2:好檢查的grep是如何工作的,你應該檢查而不是源代碼,我上面描述的非常一般的工作流程。
在哪裏,進行計算的時間(單詞進行比較等?) – bksi 2014-09-02 02:10:06
我認爲你也應該考慮CPU中的數據處理時間。 – 2014-09-02 02:10:15
這是一個正則表達式搜索還是不是? – 2014-09-02 02:19:22