《shell指令碼學習指南》 文字處理

2021-06-06 10:31:00 字數 1901 閱讀 4522

(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...