linux之sort

linux之sort用法html

 

sort命令是幫咱們依據不一樣的數據類型進行排序,其語法及經常使用參數格式:   linux

sort [-bcfMnrtk][源文件][-o 輸出文件] 補充說明:sort可針對文本文件的內容,以行爲單位來排序。web

參  數:  正則表達式

 -b   忽略每行前面開始出的空格字符。  express

 -c   檢查文件是否已經按照順序排序。  緩存

 -f   排序時,忽略大小寫字母。  app

 -M   將前面3個字母依照月份的縮寫進行排序。  post

 -n   依照數值的大小排序。  this

 -o<輸出文件>   將排序後的結果存入指定的文件。url

  -r   以相反的順序來排序。  

 -t<分隔字符>   指定排序時所用的欄位分隔字符。  

-k  選擇以哪一個區間進行排序。   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下面經過幾個例子來說述Sort的使用。
(1)sort將文件的每一行做爲一個單位,相互比較,比較原則是從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。

[rocrocket@rocrocket programming]$ cat seq.txt

banana

apple

pear

orange

[rocrocket@rocrocket programming]$ sort seq.txt

apple

banana

orange

pear

用戶能夠保存排序後的文件內容,或把排序後的文件內容輸出至打印機。下例中用戶把排序後的文件內容保存到名爲result的文件中。 $ Sort seq.txt > result

(2)sort的-u選項

它的做用很簡單,就是在輸出行中去除重複行。

[rocrocket@rocrocket programming]$ cat seq.txt

banana

apple

pear

orange

pear

[rocrocket@rocrocket programming]$ sort seq.txt

apple

banana

orange

pear

pear

[rocrocket@rocrocket programming]$ sort -u seq.txt

apple

banana

orange

pear

pear因爲重複被-u選項無情的刪除了。

(3)sort的-r選項

sort默認的排序方式是升序,若是想改爲降序,就加個-r就搞定了。

[rocrocket@rocrocket programming]$ cat number.txt

1 3 5 2 4

[rocrocket@rocrocket programming]$ sort number.txt

1 2 3 4 5

[rocrocket@rocrocket programming]$ sort -r number.txt

5 4 3 2 1

(5)sort的-o選項

因爲sort默認是把結果輸出到標準輸出,因此須要用重定向才能將結果寫入文件,形如sort filename > newfile。

可是,若是你想把排序結果輸出到原文件中,用重定向可就不行了。

[rocrocket@rocrocket programming]$ sort -r number.txt > number.txt

[rocrocket@rocrocket programming]$ cat number.txt

[rocrocket@rocrocket programming]$

看,居然將number清空了。

就在這個時候,-o選項出現了,它成功的解決了這個問題,讓你放心的將結果寫入原文件。這或許也是-o比重定向的惟一優點所在。

[rocrocket@rocrocket programming]$ cat number.txt

1 3 5 2 4

[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt

[rocrocket@rocrocket programming]$ cat number.txt

5 4 3 2 1

(6) sort的-n選項

你有沒有遇到過10比2小的狀況。我反正遇到過。出現這種狀況是因爲排序程序將這些數字按字符來排序了,排序程序會先比較1和2,顯然1小,因此就將10放在2前面嘍。這也是sort的一向做風。

咱們若是想改變這種現狀,就要使用-n選項,來告訴sort,「要以數值來排序」!

[rocrocket@rocrocket programming]$ cat number.txt

1 10 19 11 2 5

[rocrocket@rocrocket programming]$ sort number.txt

1 10 11 19 2 5

[rocrocket@rocrocket programming]$ sort -n number.txt

1 2 5 10 11 19

(7) sort的-t選項和-k選項

若是有一個文件的內容是這樣:

[rocrocket@rocrocket programming]$ cat facebook.txt

banana:30:5.5

apple:10:2.5

pear:90:2.3

orange:20:3.4

這個文件有三列,列與列之間用冒號隔開了,第一列表示水果類型,第二列表示水果數量,第三列表示水果價格。那麼我想以水果數量來排序,也就是以第二列來排序,如何利用sort實現?幸虧,sort提供了-t選項,後面能夠設定間隔符。指定了間隔符以後,就能夠用-k來指定列數了。

[rocrocket@rocrocket programming]$ sort -n -k 2 -t ‘:’ facebook.txt

apple:10:2.5

orange:20:3.4

banana:30:5.5

pear:90:2.3

(8) 其餘的sort經常使用選項

-f會將小寫字母都轉換爲大寫字母來進行比較,亦即忽略大小寫

-c會檢查文件是否已排好序,若是亂序,則輸出第一個亂序的行的相關信息,最後返回1

-C會檢查文件是否已排好序,若是亂序,不輸出內容,僅返回1

-M會以月份來排序,好比JAN小於FEB等等

-b會忽略每一行前面的全部空白部分,從第一個可見字符開始比較。

 

uniq

標誌
-c 在輸出行前面加上每行在輸入文件中出現的次數。
-d 僅顯示重複行。
-u 僅顯示不重複的行。
 
head

概述:head命令用於顯示文件文字區塊

一、格式

  head 【參數】【文件】

二、參數

  -q 隱藏文件名

  -v 顯示文件名

  -c<字節> 顯示字節數

  -n<行數> 顯示的行數

 

sed命令

  1.  實例  
  2. 刪除:d命令  
  3. *  
  4. $ sed '2d' example-----刪除example文件的第二行。  
  5. *  
  6. $ sed '2,$d' example-----刪除example文件的第二行到末尾全部行。  
  7. *  
  8. $ sed '$d' example-----刪除example文件的最後一行。  
  9. *  
  10. $ sed '/test/'d example-----刪除example文件全部包含test的行。  
  11. 替換:s命令  
  12. *  
  13. $ sed 's/test/mytest/g' example-----在整行範圍內把test替換爲mytest。若是沒有g標記,則只有每行第一個匹配的test被替換成mytest。  
  14. *  
  15. $ sed -n 's/^test/mytest/p' example-----(-n)選項和p標誌一塊兒使用表示只打印那些發生替換的行。也就是說,若是某一行開頭的test被替換成mytest,就打印它。  
  16. *  
  17. $ sed 's/^192.168.0.1/&localhost/' example-----&符號表示替換換字符串中被找到的部份。全部以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost。  
  18. *  
  19. $ sed -n 's/\(love\)able/\1rs/p' example-----love被標記爲1,全部loveable會被替換成lovers,並且替換的行會被打印出來。  
  20. *  
  21. $ sed 's#10#100#g' example-----不論什麼字符,緊跟着s命令的都被認爲是新的分隔符,因此,「#」在這裏是分隔符,代替了默認的「/」分隔符。表示把全部10替換成100。  
  22. 選定行的範圍:逗號  
  23. *  
  24. $ sed -n '/test/,/check/p' example-----全部在模板test和check所肯定的範圍內的行都被打印。  
  25. *  
  26. $ sed -n '5,/^test/p' example-----打印從第五行開始到第一個包含以test開始的行之間的全部行。  
  27. *  
  28. $ sed '/test/,/check/s/$/sed test/' example-----對於模板test和west之間的行,每行的末尾用字符串sed test替換。  
  29. 多點編輯:e命令  
  30. *  
  31. $ sed -e '1,5d' -e 's/test/check/' example-----(-e)選項容許在同一行裏執行多條命令。如例子所示,第一條命令刪除15行,第二條命令用check替換test。命令的執 行順序對結果有影響。若是兩個命令都是替換命令,那麼第一個替換命令將影響第二個替換命令的結果。  
  32. *  
  33. $ sed --expression='s/test/check/' --expression='/love/d' example-----一個比-e更好的命令是--expression。它能給sed表達式賦值。  
  34. 從文件讀入:r命令  
  35. *  
  36. $ sed '/test/r file' example-----file裏的內容被讀進來,顯示在與test匹配的行後面,若是匹配多行,則file的內容將顯示在全部匹配行的下面。  
  37. 寫入文件:w命令  
  38. *  
  39. $ sed -n '/test/w file' example-----在example中全部包含test的行都被寫入file裏。  
  40. 追加命令:a命令  
  41. *  
  42. $ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test開頭的行後面,sed要求命令a後面有一個反斜槓。  
  43. 插入:i命令  
  44. $ sed '/test/i\\  
  45. new line  
  46. -------------------------' example  
  47. 若是test被匹配,則把反斜槓後面的文本插入到匹配行的前面。  
  48. 下一個:n命令  
  49. *  
  50. $ sed '/test/{ n; s/aa/bb/; }' example-----若是test被匹配,則移動到匹配行的下一行,替換這一行的aa,變爲bb,並打印該行,而後繼續。  
  51. 變形:y命令  
  52. *  
  53. $ sed '1,10y/abcde/ABCDE/' example-----把1--10行內全部abcde轉變爲大寫,注意,正則表達式元字符不能使用這個命令。  
  54. 退出:q命令  
  55. *  
  56. $ sed '10q' example-----打印完第10行後,退出sed。  
  57. 保持和獲取:h命令和G命令  
  58. *  
  59. $ sed -e '/test/h' -e '$G example-----在sed處理文件的時候,每一行都被保存在一個叫模式空間的臨時緩衝區中,除非行被刪除或者輸出被取消,不然全部被處理的行都將 打印在屏幕上。接着模式空間被清空,並存入新的一行等待處理。在這個例子裏,匹配test的行被找到後,將存入模式空間,h命令將其複製並存入一個稱爲保 持緩存區的特殊緩衝區內。第二條語句的意思是,當到達最後一行後,G命令取出保持緩衝區的行,而後把它放回模式空間中,且追加到如今已經存在於模式空間中 的行的末尾。在這個例子中就是追加到最後一行。簡單來講,任何包含test的行都被複制並追加到該文件的末尾。  
  60. 保持和互換:h命令和x命令  
  61. *  
  62. $ sed -e '/test/h' -e '/check/x' example -----互換模式空間和保持緩衝區的內容。也就是把包含test與check的行互換。  
  63. 7. 腳本  
  64. Sed腳本是一個sed的命令清單,啓動Sed時以-f選項引導腳本文件名。Sed對於腳本中輸入的命令很是挑剔,在命令的末尾不能有任何空白或文本,若是在一行中有多個命令,要用分號分隔。以#開頭的行爲註釋行,且不能跨行。  

截取某段時間的日誌

sed -n '/Apr 19 21:58:15/,/Apr 19 22:22:32/p' /var/log/messages

相關文章
相關標籤/搜索