ed中的替換命令s是 [address]s/pattern/replacement/flag sed和awk 都是面向字元流的。都是從文本文件中一次一行地讀取輸入 它們控制所做的工作時 所用的指令不同 sed的字元流定位對如何應用定址有重要影響。在ed中沒有指定地址的命令 隻影響當前行。sed遍歷文 ...
ed中的替換命令s是 [address]s/pattern/replacement/flag
sed和awk
-
都是面向字元流的。都是從文本文件中一次一行地讀取輸入
-
它們控制所做的工作時 所用的指令不同
sed的字元流定位對如何應用定址有重要影響。在ed中沒有指定地址的命令
隻影響當前行。sed遍歷文件,每次一行,這樣每一行都成為當前行,而且
每一行都應用這個命令。結果是sed對文件中的每一行應用了沒有地址的命令。
也就是說,sed是隱式的全局命令。
在ed中,使用定址擴大命令影響的行數;在sed中,使用定址限制
受命令影響的行數
awk是作為可編程的編輯器而開發的,同sed一樣,它也是面向字元流的,
並且解釋編輯命令的腳本。awk與sed不同的地方是它廢棄了行編輯器的
命令集。它提供了仿效C語言的程式設計語言,例如,print語句取代p命令;
但延續了定址的概念
大致相同的方式調用sed和awk command [options] script filenames
script指定了要執行的指令。如果在命令行上指定script,假如它包含有
可以由shell解釋的空格或任意字元(例如$),那就必須用’’括起來
在sed和awk,每個指令都包括兩部分:模式和過程。
模式是由斜桿(/)分隔的正則表達式;過程指定一個或多個將被執行的動作
在sed和awk,過程的內容有很大不同。在sed中,過程由類似於行編輯器
中使用的編輯命令組成,大部分是單個字母。而在awk,過程由程式設計語句
和函數組成。過程必須用大括弧括起。
通常情況下,awk將每個輸入行解釋為一條記錄而將那一行上的每個單詞
(由空格或製表符分隔)解釋為一個欄位。一個或多個連續的空格或製表符被看做
一個定界符。awk允許在模式或過程中引用這些欄位。$0代表整個輸入行。 $1
$2…表示輸入行上的每個欄位。
sed
-
-e 將下一個參數解釋為指令
-
-n 阻止自動輸出(所有行),和p連用
-
-f scriptfile
awk
-
-f scriptfile
-
-F 改變欄位分隔符
參考資料