(1)位元組排序
首先應該了解一下各種字元的字元值
$ man iso_8859_1
#以嚴格的位元組順序排序檔案
$ lc_all=c sort /etc/passwd
#以candian-french的文字順序排序
$ lc_all=fr_ca.iso88591 sort /etc/passwd
(2)字段排序,需要找出乙個或多個鍵值
#-t和-k的應用
$ sort -t: -k2.4,5.6 regular.txt
#-t表示分隔符,若不指定-t,則預設空白為分隔符,此處應是:為分隔符
#-k後跟數值,此處為:分隔符從第二個欄位的第四個字元開始生效,到第五個欄位的第六個字元截止,如果其後僅跟乙個字段編號而無逗號,截止出應為記錄的結尾
#反向排序
$ sort -t: -k3nr,3 /etc/passwd
#-n表示以數值比較,-r表示反向排序
#此處意為在第三個欄位內以數值反向排序,即:以uid排序
#以gid和uid同時排序
$ sort -t: -k4n -k3n /etc/passwd
#先會比較第四個欄位的數值,當它們相等時,再比較第三個欄位的數值,然後就可以以順序列出了
#-u可以將幾個鍵值的相同的文字行只顯示乙個出來
$ sort -t: -k4n -u /etc/passwd
#雖然-u可以刪除多餘的重複行,但它是以鍵值為基礎的
uniq的管道應用
預存檔案,test_for_uniq
『hello
allow
linux
hello
test
important
test
』#注意:uniq常作用於sort之後的檔案
#顯示排序後的唯一的檔案
$ sort test_for_uniq | uniq
#將行的重複次數顯示出來
$ sort test_for_uniq | uniq -c
#僅僅顯示重複的行
$ sort test_for_uniq | uniq -d
#僅僅顯示未重複的行
$ sort test_for_uniq | uniq -u
預存檔案,fmt_test
『can you help me?
i want to see a movie.
』
$ fmt -s -w 10 fmt_test
#fmt為文字格式化工具
#-s表示僅切割較長的行,但不會將較短的行結合成較長的行
#-w n設定輸出行的寬度為n個字元
#這裡表示,檔案將被格式化為10個字元一行的檔案
wc為字數統計工具,預設為一行報告,分別為:行數、字數和位元組數
-c,位元組數
-l,行數
-w,字數
(1)顯示前幾條記錄的幾種方法
$ head -n n [files]
$ head -n [files]
$ awk 'fnr <= n' [files]
$ sed -e nq [files]
$ sed nq [files]
(2)顯示後幾行
$ tail -n [files]
《Shell指令碼學習指南》第四章 文字處理工具
4.1 排序文字 4.1.1 行的排序 未提供命令列選項時,整個記錄會根據當前locale所定義的次序排序。在傳統的c locale中,也就是ascii順序。4.1.2 以欄位排序 k選項的後面接著的是乙個字段編號,或者是一對數字。每個編號後面都可以接乙個點號的字元位置,或修飾符字母。如果僅指定乙個...
shell文字處理
最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...
shell 文字處理
最近優化指令碼,將幾套指令碼合併,比如,處理nand手機的指令碼和處理emmc手機的指令碼是不一樣的,這導致我們的指令碼有很多個版本。手機側只有busybox,所以不能使用功能強大的python來處理文字。花了半天時間,發現雖然語法比較怪異,但也能簡潔的完成任務。if e proc emmc the...