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:打印出現多次的行。