# 練習 7:`grep`
> 原文:[Exercise 7: grep](https://learncodethehardway.org/more-python-book/ex7.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
`find`命令在 45 分鐘內應該可能是一個挑戰,但它是一個很好的挑戰。到了這個時間,你應該可以去掉盡可能多的,阻止你開始的障礙。你可能會發現,當你清除一些障礙時,你的技能會變得更糟。例如,我以前在開始工作之前先走路去喝咖啡。這花了我大約 30分鐘,非常好,但 30 分鐘多了會變成幾個小時。我決定停止這樣做,但是我的工作就費勁了。原來我還需要咖啡,所以我買了一臺不錯的咖啡機,學會了如何制作我自己的拿鐵咖啡。現在我站了起來,給自己做一杯拿鐵咖啡,然后去畫一些畫,這讓我處于創意工作的模式。
你所做的一切不都是無效的,所以要小心不要因為占用時間而消除一些東西。有一些儀式和個人習慣,可以讓你的大腦準備就緒。訣竅是不要消除這些,而是??讓它們在開始工作之前更容易做。
本書的第一部分中,您還應該了解時間管理的概念。設置45分鐘的時間限制將使您非常清楚,當您不知道需要多久做某件事的時候。只有45分鐘,你不能把 30 分鐘浪費在調整你的 vim 窗口上,或者組織完美的目錄結構,然后實現一個全新的排序算法。你必須節約你所實現的東西,以及命令你工作的東西。
處理項目的一個很好的方法是從最簡單的事情開始,你可以首先配置并運行它。在`find`示例中,可以通過`glob`模塊獲取文件。具有較差時間管理技能的人,會立即嘗試實現`-exec`參數,來證明它們是一個 NB 的程序員,但是`-exec`不能在沒有-name的情況下工作,而且更難實現。決定的方法是告訴自己,你想要一些完成后才能使用的東西。如果45分鐘之后,你可以使用`-exec`,但不能獲取文件,那么你如何使用它?如果同一時間之后,你得到了一種方法,來列出匹配名稱的文件,那么你已經完成了。
繼續處理您的障礙列表,并評估您的開始怎么樣,但現在開始看看時間管理。策略化你將要做的工作,以便如果你用完了時間,你做出來了一些可以用的東西。他們不必是完整的功能,但是兩個可用的功能比 10 個不可用的更好,因為你忘記了他們所需要的最簡單的東西。或者更糟的是 10 個不可用的東西,因為你實現了一半,然后就跳過去了,所以所有這些都不能用。
## 挑戰練習
你現在要實現`grep`命令了。像往常一樣,你應該去讀的`grep`的`man`,然后玩轉它。`grep`的目的是使用正則表達式在文件中搜索文本模式。你使用`glob`模塊實現了`find`,這次的操作也一樣,但在文件中而不是在目錄中完成。例如,如果我想在我的書中搜索“help”這個詞,我可以這樣做:
```
grep help *.rst
```
`grep`的命令行參數相當簡單。困難的部分是處理正則表達式,所以你應該依賴于`re`模塊。該模塊使您能夠加載文件的內容,然后在里面搜索別人在命令行中提供給您的模式串。另一個提示是,您最有可能希望使用`readline`加載整個文件,而不是使用`read`。即使效率較低,`grep`的大部分選項都能更好地運行。
您可能還打算簡單瀏覽練習 30,我在那里介紹正則表達式。
## 研究性學習
+ `re`模塊有什么特別的選項,使它更像`grep`嗎?
+ 您可以將您的`grep`黑魔法轉換成您在`find`工具中使用的模塊,來添加`grep`功能嗎?
## 深入學習
`re`模塊是非常重要的,所以花時間去真正研究它,并且學習你能學到的任何事情。我們將在本書的另一部分中使用它以及正則表達式。
- 笨辦法學 Python · 續 中文版
- 引言
- 第一部分:預備知識
- 練習 0:起步
- 練習 1:流程
- 練習 2:創造力
- 練習 3:質量
- 第二部分:簡單的黑魔法
- 練習 4:處理命令行參數
- 練習 5:cat
- 練習 6:find
- 練習 7:grep
- 練習 8:cut
- 練習 9:sed
- 練習 10:sort
- 練習 11:uniq
- 練習 12:復習
- 第三部分:數據結構
- 練習 13:單鏈表
- 練習 14:雙鏈表
- 練習 15:棧和隊列
- 練習 16:冒泡、快速和歸并排序
- 練習 17:字典
- 練習 18:性能測量
- 練習 19:改善性能
- 練習 20:二叉搜索樹
- 練習 21:二分搜索
- 練習 22:后綴數組
- 練習 23:三叉搜索樹
- 練習 24:URL 快速路由
- 第四部分:進階項目
- 練習 25:xargs
- 練習 26:hexdump
- 練習 27:tr
- 練習 28:sh
- 練習 29:diff和patch
- 第五部分:文本解析
- 練習 30:有限狀態機
- 練習 31:正則表達式
- 練習 32:掃描器
- 練習 33:解析器
- 練習 34:分析器
- 練習 35:解釋器
- 練習 36:簡單的計算器
- 練習 37:小型 BASIC
- 第六部分:SQL 和對象關系映射
- 練習 38:SQL 簡介
- 練習 39:SQL 創建
- 練習 40:SQL 讀取
- 練習 41:SQL 更新
- 練習 42:SQL 刪除
- 練習 43:SQL 管理
- 練習 44:使用 Python 的數據庫 API
- 練習 45:創建 ORM
- 第七部分:大作業
- 練習 46:blog
- 練習 47:bc
- 練習 48:ed
- 練習 49:sed
- 練習 50:vi
- 練習 51:lessweb
- 練習 52:moreweb