已經看了一段時間的Linux Shell編程了,也能完成一些基本的使用,爲了加深理解,剛好看到了The Unix School的一個sed&awk教程,不是簡單的命令參數堆積,而是一個至關實用的系列,所以,但願能在幾天內完成翻譯.翻譯過程不會逐字翻譯,會穿插一些註釋,包括本身的一些理解和其餘的一些引用,做爲開篇,簡單說一下sed的工做機制,對後面的理解會有很大幫助。html
sed是什麼:正則表達式
sed是一個非交互式的流編輯器(stream editor)。所謂非交互式,是指使用sed只能在命令行下輸入編輯命令來編輯文本,而後在屏幕上查看輸出;而所謂流編輯器,是指sed每次只從文件(或輸入)讀入一行,而後對該行進行指定的處理,並將結果輸出到屏幕(除非取消了屏幕輸出又沒有顯式地使用打印命令),接着讀入下一行。整個文件像流水同樣被逐行處理而後逐行輸出。(via Walk in Mindfields )編程
sed工做機制:編輯器
sed維護兩個緩衝區,pattern space和hold space,命令開始執行以前都爲空。測試
pattern space緩衝區用於臨時保存每次讀取的一行的內容,大部分的匹配和替換等等操做都是針對pattern space中的內容進行的,所以不會對輸入文件有任何影響,而hold space則做爲後備緩衝區使用,除非指定了一些特殊的命令(例如D刪除命令),不然pattern space中的內容會在處理完一行以後清空,但hold space中的內容在處理完每一行時不會被刪除。spa
也就是說pattern space至關於咱們的內存,hold space至關於硬盤.處理的時候在內存裏,處理過的就放回硬盤.(這是個人理解,有一點點不恰當,可是所以一些概念會比較好理解.)命令行
具體來講,能夠大體分爲如下幾步:翻譯
1.首先,從標準輸入流讀取一行,移除換行符,而後存入pattern space中htm
2.執行指定的命令,(每一個命令都有一個可選的地址(能夠是行號,也多是一個正則表達式匹配),這個地址做爲一個執行命令前的測試,指定了須要對那些行進行操做。當前行只有匹配的狀況下才會執行命令。)教程
3.當指定全部的命令都執行完了以後,pattern space內容就被處理過了,sed默認會將pattern space中的內容打印到標準輸出中,移除的換行符也會打印出來。本行操做完成。
4.而後sed會讀取下一行的內容,再次執行相同的操做。直到行尾。
基本上最基礎的理論就差很少了.主要是這個工做機制比較重要.後面從示例中慢慢加深理解.錯誤之處請你們指正.