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表示,0 NF表示最後一列,$(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:打印出現多次的行。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章