概述
一般情況下,從grep到sed和awk的學習過程是很自然的。sed和awk是一般用戶、程序員和系統管理員們處理文本文件的有力工具。
sed的名字來源於其功能,它是個字符流編輯器(stream editor),可以很好地完成對多個文件的一系列編輯工作。
awk的名字來源於它的開發人Aho、Weinberger和Kernighan,它是一種程序設計語言,非常適合結構化數據的處理和格式化報表的生成。
sed 與 awk 共性
它們都使用相似的語法來調用。
它們都是面向字符流的,都是從文本文件中一次一行地讀取輸入,並將輸出直接送到標准輸出端。
它們都使用正則表達式進行模式匹配。
它們允許用戶在腳本中指定指令。
它們有如此多的共同點,原因之是它們都起源於相同的行編輯器—ed。sed和awk的區別在於它們控制所做的工作時所用的指令不同。
語法
command [toptions] script_filename
輸入:stdin 或 文件
輸出:stdout 或 文件
禁止:輸入輸出是同一個文件
參數:sed和awk有區別,后面單獨介紹
腳本:當命令較少時,可以單獨輸入,命令多時就需要寫道腳本文件中。
sed & awk指令組成

工作流程

每個程序每次從輸入文件中讀取一個輸入行,生成該輸入行的備份,並且對該備份執行腳本中指定的指令。因此,對輸入行所做的改動不會影響真正的輸入文件。
當讀取輸入的每行時,程序讀取腳本中的第一個指令並檢測當前行的模式。如果沒有匹配,這個過程被忽略並讀取下一個指令。如果有一個匹配,那么執行過程中指定的一個或多個動作。讀取所有的指令,而不只是讀取與輸入行匹配的第一條指令。
當所有可用指令被解釋並應用於單個行后,sed輸出該行並循環處理每個輸入行。另一方面,awk不自動輸出行,腳本中的指令控制awk最終所做的事情。
在sed和awk中過程的內容有很大不同。在sed中,過程由類似於行編輯器中使用的那些編輯命令組成。大部分命令由單個字母組成。
在awk中,過程由程序設計語句和函數組成。過程必須用大括號括起。
