# 練習 9:`sed`
> 原文:[Exercise 9: sed](https://learncodethehardway.org/more-python-book/ex9.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
使用這些小型項目來研究你自己是有用的,但讓我們來看看你主要關注的主題:
+ 開始工作的啟動流程,例如你的文本編輯器,你可以打字打的多好,以及計算機內部發生的其他事情。
+ 心理狀態,當你開始工作時,建議將日志作為控制它的一種方式。
+ 工作環境包括你的桌子,照明,椅子和你使用的電腦類型。
+ 身體姿勢和健康,以避免在工作時受傷。
在這個練習中,我們將采取這一改進計劃,并進一步跟蹤一些指標。你一直在使用小型命令行工具,閱讀并確定其功能,然后花費45分鐘來實現一個簡單的黑魔法。現在你可以列舉你的功能,確定優先級,然后確定在45分鐘內可以完成的功能。事實上,你可以回溯目前為止所做的所有項目,以及你的更改筆記,并計算出這一指標,看看你是否在改進。
現在花點時間來回顧你的筆記,并大概估算每45分鐘的完成的功能的百分比。在紙上繪制他們,然后看你的筆記,看是否有顯著的變化,是好還是壞,當你改變你的工作方式的時候。然后在這個練習中,嘗試根據你所做的改變,來預測你將做多少工作。你甚至可以嘗試將一些障礙添加回你的流程,看看它如何影響你的生產力。
> 警告
> 請記住,這是個人指標,而不是與任何人分享的內容。這些幾乎不科學,意味著你僅僅在分析你的工作方式中獲得一些客觀性。它們不是可以描述所有程序員的宏觀指標,但是你最好相信,如果經理發現你有這些東西,他們會要求看到它們。然后,他們會要求你的團隊中的每個人都開始做這些工作,然后管理層將會使用這些來引起大量的麻煩。將你的實驗室筆記看做非常私人的記錄,并且從不讓任何人看到它。
## 挑戰練習
這個練習將比其他練習更復雜,因為我們將要處理更多的正則表達式,并實現一個名為`sed`的工具。通過接受利用正則表達式替換模式串,`sed`工具能夠讓你改變文本,然后在接收到的每一行中,確定要替換什么。難點可能在于實現`sed`的表達式格式,所以我建議你用兩種方法來實現:
Lv1 具有命令行選項,用于最基本的`sed`用法,將一個字符串替換為另一個字符串。
Lv2 在這些命令行選項中啟用正則表達式。
Lv3 是實現`sed`表達式格式。
使用`sed`的一個例子是,在文本流中將一個單詞更改為另一個單詞。如果我想更改`ls`的輸出,以便使用“author”替換我的名字,我可以這樣做:
```
ls -l | sed -e "s/zedshaw/author/g"
```
然而,`sed`的實力在于使用正則表達式來匹配模式串并替換它們。如果你使用 vim 編輯器,那么你已經熟悉這種語法:
```
ls -l | sed -e"s / Jul [0-9] [0-9] / DATE / g"
```
你應該閱讀`man sed`頁面,但你可能需要進行更多的研究來實現它。我建議你晚上做你的研究,然后根據這項研究,第二天進行45分鐘的 Hack。這將有助于你均衡你的指標,專注于你的工作。
## 研究性學習
+ 當你制訂指標時,你是否發現了異常或令人驚訝的事情?
+ 在開始本課程之前,你的工作預測是什么?
+ 它如何匹配你實際所做的事情?
## 深入學習
在這個練習的視頻(付費)中,我會向你展示一個叫做“運行圖”的東西。運行圖是你希望監視的一些活動的簡單圖表,向你顯示如何隨時間變化。人們使用運行圖來發現行為的巨大變化,因為它們是既簡單又有效的可視化工具。你將在書中使用運行圖,因為它們非常簡單但非常強大。
- 笨辦法學 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