概述html
通常狀況下,從grep到sed和awk的學習過程是很天然的。sed和awk是通常用戶、程序員和系統管理員們處理文本文件的有力工具。程序員
sed的名字來源於其功能,它是個字符流編輯器(stream editor),能夠很好地完成對多個文件的一系列編輯工做。正則表達式
awk的名字來源於它的開發人Aho、Weinberger和Kernighan,它是一種程序設計語言,很是適合結構化數據的處理和格式化報表的生成。數組
sed 與 awk 共性編輯器
它們都使用類似的語法來調用。
它們都是面向字符流的,都是從文本文件中一次一行地讀取輸入,並將輸出直接送到標準輸出端。
它們都使用正則表達式進行模式匹配。
它們容許用戶在腳本中指定指令。函數
它們有如此多的共同點,緣由之是它們都起源於相同的行編輯器—ed。sed和awk的區別在於它們控制所作的工做時所用的指令不一樣。工具
語法學習
command [toptions] script_filenamespa
輸入:stdin 或 文件設計
輸出:stdout 或 文件
禁止:輸入輸出是同一個文件
參數:sed和awk有區別,後面單獨介紹
腳本:當命令較少時,能夠單獨輸入,命令多時就須要寫道腳本文件中。
sed & awk指令組成
工做流程
每一個程序每次從輸入文件中讀取一個輸入行,生成該輸入行的備份,而且對該備份執行腳本中指定的指令。所以,對輸入行所作的改動不會影響真正的輸入文件。
當讀取輸入的每行時,程序讀取腳本中的第一個指令並檢測當前行的模式。若是沒有匹配,這個過程被忽略並讀取下一個指令。若是有一個匹配,那麼執行過程當中指定的一個或多個動做。讀取全部的指令,而不僅是讀取與輸入行匹配的第一條指令。當全部可用指令被解釋並應用於單個行後,sed輸出該行並循環處理每一個輸入行。另外一方面,awk不自動輸出行,腳本中的指令控制awk最終所作的事情。在sed和awk中過程的內容有很大不一樣。在sed中,過程由相似於行編輯器中使用的那些編輯命令組成。大部分命令由單個字母組成。在awk中,過程由程序設計語句和函數組成。過程必須用大括號括起。