sed
sed本身也是一個管道命令,可以分析standard input 。sed還可以將數據進行取代、刪除、新增、截取特定行等等的功能。
sed的用法:sed [-nefr] 動作
選項與參數:
-n : 使用安靜(silent)模式。在一般sed的用法中,所有來自STDIN的數據一般都會被列出到屏幕上。但如果 加上-n參數後,則只有經過sed特殊處理的那一行(或者動作)纔會被列出來。
-e : 直接在指令列模式上進行sed的動作編輯
-f : 直接將sed的動作寫在一個文件內,-f filename 則可以執行filename內的sed動作:
-r : sed的動作支持的是延伸性正則表達式的語法(預設的是基礎正則吧表達式語法)
-i :直接修改讀取的文件內容,而不是由屏幕輸出。
動作說明:[n1[,n2]]function
n1,n2 :不一定存在,一般代表【選擇進行動作的行數】,如果我的動作需要再10-20行之間進行,則[10,20[動作行爲]]
function 有下列這些選項:
a: 新增,a的後面可以接字符串,而這些字符串會在新的一行出現(當前的下一行)
c:取代, c的後面可以接字符串,而這些字符串可以取代 n1,n2之間的行
d:刪除,d後面通常不接任何東西
i:插入,i的後面可以接字符串,而這些字符串會在新的一行出現(當前的上一行)
p:打印,將某個選擇的數據打印出,通常p會與參數sed -n 一起運行
s: 取代 可以直接進行取代的工作 eg:1,20s/old/new/g
示例:
範例1:將/etc/passwd的內容列出並且打印行號,同時,將2-5行刪除
[practice@rhel6 ~]$ nl /etc/passwd |sed '2,5d'
將/etc/passwd的內容列出並且打印行號,同時,將2到最後一行顯示出來
[practice@rhel6 ~]$ nl /etc/passwd |sed -n '2,$p'
sed的動作爲‘2,5d’,sed後面接的動作,要用 ' ' 兩個單引號括住。
範例2:將第2-5行的內容取代成【no 2-5】
nl /etc/passwd |sed '2,5c NO 2-5'
範例3:部分數據的搜尋與取代
sed 's/old word/new word/g'
AWK
awk也是非常棒的數據處理工具,相對於sed常常作用於一整個行的處理,awk則比較傾向於一行當中分成數個字段來處理。因此,awk相當的合適處理小型的數據 數據處理。
在awk的括號內,每一行的每個字段都是有變量名稱的,那就是$1,$2...等變量名稱。awk是以行爲一次處理的單位,而以字段爲最小的處理單位。
AWK用法:awk '條件類型1{動作1} 條件類型2{動作2} ...' filename
awk後面接兩個單引號並加上大括號{}來設定想要對數據進行的處理動作。AWK可以處理後續接的文件,也可以讀取來自前個指令的standard output。AWK主要是處理每一行的字段內的數據,而默認的字段的分隔符爲‘空格鍵’或‘tab’ 鍵。
AWK的內建變量
變量名稱 | 代表意義 |
NF | 每一行$0擁有的字段總數 |
NR | 目前awk所處理的是第幾行數據 |
FS | 目前的分割字符,默認是空格鍵 |
示例:
範例1:取出賬號與登入者的IP,且賬號與IP之間以 [tab] 隔開
last -n 5|awk '{print $1 "\t" $3}'