練習 48:ed
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
自豪地采用谷歌翻譯
如果你的流程生效了,那么你應該能夠專注于較長的項目,一次幾個星期歧譬。在這個項目中周拐,你的目標是創(chuàng)建盡可能精確的ed
命令副本溺拱。這個練習的目標是不要有創(chuàng)意朵锣,而是要系統(tǒng)地實現另一個軟件的精確副本。將其看作一個偽造的練習炕置。你會做出一些非常好的東西,你可以用它代替原來的ed
男韧,沒有人會知道朴摊。
這項工作是創(chuàng)建ed
命令的“代碼大師副本”,盡可能準確此虑,也就是說甚纲,你的測試套件應該對真正的ed
和你的版本運行同一腳本,來比較輸出朦前。這就像你在學習算法時所做的“代碼大師副本”練習介杆,除了你復制現有軟件的行為,而不是試圖記住它韭寸。這個流程是相似的春哨,但你可以使用測試套件幫助它更快地進行。
挑戰(zhàn)練習
ed
工具恩伺,是現存的最早的 Unix 文本編輯器之一赴背,坦率地說,它非常糟糕。實際上我無法想像有人使用ed
編輯文本凰荚,因為它是目前最受用戶討厭的軟件之一耸三。如果你無法想象,在 Unix 的黑暗時期浇揩,有多少計算機出了故障仪壮,制作一個ed
的副本會讓你見識一下。
ed
的一些概念是胳徽,雖然它支持腳本积锅,但它最初是以交互方式使用的。就像用于文本文件的 MUD养盗。你首先運行ed
缚陷,它以命令模式啟動,讓你可以使用命令修改文本往核。當你執(zhí)行需要輸入的命令時箫爷,它將進入輸入模式,直到該命令結束聂儒。你也必須知道行的地址來編輯它虎锚。這似乎是一種痛苦,但與其他文字編輯器相比衩婚,這是獨角獸的魔法窜护。
為了完成你的ed
副本,你需要嚴重依賴于 Python 的re
庫非春,來使用正則表達式柱徙。我們在練習 31 中使用了這個庫,所以通常你應該熟悉它和 RegEx奇昙。
我還建議你护侮,在 45 分鐘的會話內,嘗試使用ed
储耐,來你的ed
項目編寫一些代碼羊初。這樣做的痛苦將會教你如何復制它。
除此之外弧岳,你將需要閱讀man ed
頁面來獲取命令的基礎知識凳忙,并可能會觀看它的使用教程。一個很好的起步就是禽炬,在線尋找不同的示例腳本涧卵,并嘗試將它們作為你的第一個測試用例。
注
我會給你一個線索腹尖,你需要使用 FSM 來處理
ed
命令的模態(tài)本質柳恐。
研究性學習
- 查找 GNU
ed
的源代碼,即使你不懂得 C 語言,也看一看它乐设。 - 將你的
ed
實現變成一個模塊讼庇,然后可以在其他項目中使用。你需要將其用于以后的練習近尚。 - 永遠不要再做這樣的軟件蠕啄,除非你就是無聊了。