1. 程式人生 > >Linux下的sed、awk、cut、sort、uniq工具

Linux下的sed、awk、cut、sort、uniq工具

sed

sed:流式編輯器,在shell指令碼中作為過濾器,即將前一個程式的輸出作為sed的輸入,經過一系列編輯命令轉換為另一種格式輸出。
sed的基本格式:
sed ‘pattern(正則表示式)/action(動作)’ file(檔名)
sed -f scriptfile(指令碼檔案) file

sed處理的檔案既可以由標準輸入重定向,也可以當命令列引數傳入,一次傳入多個檔案,sed會依次處理。sed處理檔案時,一次讀取一行,儲存在模式空間中,並對模式空間中的內容進行處理。處理完成後,經結果輸出到螢幕。然後讀取下一行,繼續處理……

【注:】sed預設按照basic規範進行匹配。

  1. sed的action

(1)/pattern/p: 列印匹配pattern的行。
但是列印的內容包括檔案的原來的內容和匹配了pattern的內容。

例:列印以1開頭的行。

這裡寫圖片描述
結果列印了檔案file中的所有內容,並且將匹配的行列印了兩次。

(2)/pattern/d:刪除匹配的行,並將結果列印。

例:刪除以1開頭的行。

這裡寫圖片描述
【注:】/pattern/d只是在輸出時刪除匹配的行並不是在檔案中刪除。
這裡寫圖片描述

(3)/pattern/s/pattern1/pattern2/:查詢匹配pattern的行,將該行第一個匹配pattern1的字串替換為pattern2。

例:將以1開頭的行中的1替換為b

這裡寫圖片描述

(4)/pattern/s/pattern1/pattern2/g:查詢匹配pattern的行,將該行所有匹配pattern1的字串替換為pattern2。

這裡寫圖片描述

這裡寫圖片描述
&:表示pattern2與前面pattern1的匹配條件相同。
這裡寫圖片描述
\1:pattern2與pattern1的第一個括號匹配 的內容。
2. sed的選項
(1)-i:修改原檔案

這裡寫圖片描述

(2)-r:正則表示式使用extended規範
這裡寫圖片描述
(3)-n:只打印選定的行
這裡寫圖片描述
(4)-e:對模式空間的內容一次性匹配多個正則表示式或內容。
這裡寫圖片描述
3. sed的定址,指定區域(行數)

定址的形式:數字/正則表示式/兩者都有
數字:直接可以使用數字
這裡寫圖片描述


正則表示式與數字:需要將正則表示式寫入//中
這裡寫圖片描述
4. 模式空間與保持空間
模式空間:sed在其中儲存資料並且處理資料。
保護空間:在進行資料處理時,作為資料的暫存區域。

正常情況下,只是用模式空間,對資料進行加工與處理。保持空間只在顯示某些命令時使用。

命令:
g:將資料從保持空間拷貝到模式空間,以覆蓋的形式。
G:將資料從保持空間拷貝到模式空間,以追加的形式。
h:將資料從模式空間拷貝到保持空間,以覆蓋的形式。
H:將資料從模式空間拷貝到保持空間,以追加的形式。
d:刪除模式空間中的所有行,並讀取新一行。
D:只刪除模式空間中的第一行。
x:交換模式空間與保持空間中的內容。
n:以覆蓋的形式讀取下一行到模式空間。
N:以追加的形式讀取下一行到模式空間。

例:1.用sed實現逆序列印file檔案內容。
sed ‘1!G;h;$!d’ file

這裡寫圖片描述

執行步驟:
這裡寫圖片描述
2.註釋與去註釋
這裡寫圖片描述
3.將換行轉化成空格。
這裡寫圖片描述
4.分別列印奇數行與偶數行。
這裡寫圖片描述

awk

sed只能以行為單位處理資料,awk可以以列為單位處理資料。其中,每一行叫一條記錄,每一列叫一個域。

域分隔符:預設,空格。
也可以被設定,awk -F ‘:’,表示設定以:為輸入域分隔符。
awk FS=”:”,輸入域分隔符。
awk OFS=”,” 輸出域分隔符。
讀取某一列資料,用$n表示,0NF表示最後一列,$(NF-1)表示倒數第二列。

記錄分隔符:預設,\n。

awk的基本格式:
awk ‘pattern/{actions}’
awk ‘condition{actions}’
讀取第二列資料:
這裡寫圖片描述
awk也支援c語言的輸出語句:
這裡寫圖片描述
如果沒有正則表示式,就匹配檔案中的所有行。
awk的另一種格式:
這裡寫圖片描述
由結果可以知道,該條語句是統計檔案行數。
在讀取第一行內容前,先執行BEGIN中的內容(只執行一次)。
在讀完檔案中內容後,再執行END中的內容。
其中,BEGIN和END不一定每次都存在。
這裡寫圖片描述

awk也是一門弱型別,解釋型語言,可以作為指令碼來執行。
計算1-100的求和。
這裡寫圖片描述
awk指令碼的執行方式有兩種:
1.awk -f test.awk file
雖然file檔案與test.awk指令碼沒有關係,但不能少。
2.awk -f test.awk 執行後,再加Ctrl+d。

cut

cut的作用就是切割字串。
這裡寫圖片描述
cut -c 是按字元切割。
cut -b是按位元組切割。
cut -d 可以指定域分隔符。
cut -f 指定區域。
這裡寫圖片描述

sort

sort file:升序排列
sort -r file:降序排列
這裡寫圖片描述
sort -u file:去掉重複行
sort -o file:將排序結果寫入檔案
這裡寫圖片描述
sort -n file:讓字串按數值比較
這裡寫圖片描述
sort -kn file:按第n列排序
這裡寫圖片描述

uniq

uniq file:去掉相鄰的重複行。
這裡寫圖片描述
可以發現對於不相鄰的重複行,uniq並不能去掉。
uniq -c file:統計重複行出現次數。
只能統計相鄰的重複行出現次數。要統計檔案中所有的出現次數,需要先sort排序。
這裡寫圖片描述
uniq -u file:列印只出現一次的行。
uniq -d file:打印出現多次的行。
這裡寫圖片描述