Linux下的sed、awk、cut、sort、uniq工具
sed
sed:流式編輯器,在shell指令碼中作為過濾器,即將前一個程式的輸出作為sed的輸入,經過一系列編輯命令轉換為另一種格式輸出。
sed的基本格式:
sed ‘pattern(正則表示式)/action(動作)’ file(檔名)
sed -f scriptfile(指令碼檔案) file
sed處理的檔案既可以由標準輸入重定向,也可以當命令列引數傳入,一次傳入多個檔案,sed會依次處理。sed處理檔案時,一次讀取一行,儲存在模式空間中,並對模式空間中的內容進行處理。處理完成後,經結果輸出到螢幕。然後讀取下一行,繼續處理……
【注:】sed預設按照basic規範進行匹配。
- 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:打印出現多次的行。