shell學習筆記 文字處理

2021-05-02 03:24:10 字數 3749 閱讀 4482

regexp

grep

-c 只輸出匹配行的計數。

-i 不區分大小寫(只適用於單字元)。

-h 查詢多檔案時不顯示檔名。

-l 查詢多檔案時只輸出包含匹配字元的檔名。

-n 顯示匹配行及行號。

-s 不顯示不存在或無匹配文字的錯誤資訊。

-v 顯示不包含匹配文字的所有行。

[[:upper:]]=[a-z]	[[:lower:]]=[a-z]	[[:digit:]]=[0-9]

[[:alnum:]]=[0-9a-za-z] [[:space:]]=空格或tab鍵 [[:alpha:]]=[a-za-z]

awk

+ 使用+匹配乙個或多個字元。

?前面匹配模式出現頻率為一次或者沒有。

&& 兩邊條件為真,如:awk '$0 ~/pattern/&&$3=="string"' file

|| 兩邊條件之一為真,如:awk '' file

argc	:命令列引數個數,或者傳入指令碼的引數個數。

argv :引數排列陣列,第n個引數記錄為argv[n-1]。

environ :系統設定的環境變數。單獨環境變數用實際變數名,如environ["editor"]="vi"。

filename:awk實際操作的輸入檔案,當awk同時處理多個檔案時,代表正在被處理的檔案。

fnr :當前檔案操作的記錄數。值小於等於nr(所有操作記錄的總數)。

nr :所有操作記錄的總數。

nf :當前記錄的域數。&nf可以獲取,最後乙個域的值。

fs :輸入域分隔符,和命令中-f選項一樣,可以進行設定,預設為空格。

ofs :輸入出域分隔符,可以進行設定,預設為空格。

rs :輸入記錄分隔符,可以進行設定,預設為換行符(/n)。

ors :輸出記錄分隔符,可以進行設定,預設為換行符(/n)。

sed

n 取消列印所有文字行,如果不指定的話,則會在每次執行後都會列印所有文字。

e 當有多個操作時,在每個操作前面加上乙個-e選項,說明是操作命令。

例:sed -n -e '/pattern/a/**** you' -e 'p' file:在匹配行後新增新行**** you,並全部列印。

sed編輯命令

p 	列印匹配行。如: sed -n '/pattern/p' 列印匹配pattern的行。

= 顯示檔案行號 如:sed -n '/pattern/=' 列印匹配pattern的行號。

a/ 在定位行後以新行新增文字資訊 如:sed -n '5a/**** you' 在第5行後新增新行**** you

i/ 在定位行前以新行新增文字資訊 如:sed -n '5i/**** you' 在第5行前新增新行**** you

d 刪除定位行 如:sed -n '5d' 刪除第5行。

c/ 用新文字替換定位行文字 如:sed -n '5c/**** you' 將第5行替換為**** you

g:預設情況下,只會替換pattern1的第一次出現,設定g替換所有出現的pattern1。

p:將所有被替換行,列印出來。

w檔名 :將替換的輸出重定向至檔案。只是替換行的輸出。如 sed -n '/pattern/ s/p1/p2/w result' file:將符合pattern並且經過替換的行輸出。

&:可以用此符號儲存被替換的字串,用於替換字串中,達到修改或者附加原字串的目的。如:sed -n 's/p1/pretty p2/p' file:將p1替換為pretty p2。

可以人多個組合使用上述替換選項。如:sed -n 's/pattern/p2/gp' 全域性將pattern替換為p2,並列印。

r file	從file中讀文字,寫在定位行之後。如:sed -n -e '$r file'在最後一行讀入file。

w file 寫結果到file。如:sed -n '2,$w newfile' 把2到結束寫入newfile。

sort
可以用-k指定多個域,做為第二層排序。cat myfile | sort -t: -k1 -k3.2:將myfile首先按域1排序,相同的再按域3從第2個字元起排序。	 

在指定的域,可以通過m.n設定從第幾個字元開始做為參照進行排序。如上。

uniq

uniq去除或者獲取文字中的重複行。一般格式為:uniq [-u|-d|-c|-f] [輸入檔案] [輸出檔案]。

-u 只顯示不重得行。有重複的行被禁止。如: uniq -u myfile 只顯示myfile中不重得的行。

-d 只顯示重複行。無重複的行被禁止。 如:uniq -d myfile 只顯示myfile中重複的行。

-c 顯示第個行的重得次數。如:uniq -c myfile 顯示第一行的重複行和不重複行,並顯示第行的重複次數。

-f n 對域n作為比對進行重複判定。

uniq中的重複行,為連續相同的行,sort -u選項中的重複行為所有相同的行。即:uniq並不將不相連續相同行認為是重複行。

join

join將兩個文字中行,按照相對應的域的關係,連線起來。為了使兩個文字連線,應該先分別對兩個文字,依其匹配域做排序。join的一般格式為:join [-j1.m] [-j2.n] [-a|-o] file1 file2

-a n:n為檔案編號,指定可以顯示檔案n中的不匹配行。如:join -j 1.2, -j 2.1 -a1 -a2 myfile1 myfile2 將myfile1的域2和myfile2的域1進行匹配連線,並顯示myfile1的不匹配行,和myfile2的不匹配行。

-o m.n:m為檔案編號,n為域編號,即:顯示m檔案匹配行的域n。如:join -j1.2 -j2.1 -o1.1 -o2.2 myfile1 myfile2 將myfile1的域2和myfile2的域1進行匹配連線,並顯示myfile1的域1和myfile2的域2。

-j m.n:m為檔案編號,n為域編號,設定檔案m的匹配域為n而不是預設的1。如上例。

cut從輸入檔案中抽取指定域或者指定字元。一般格式為:cut [-c|-f] [-d sep] 輸入檔案。

-c m,a-b:剪下第m個字元和第a到b個字元。ls-l | sed '1d' | cut -c1-10 獲取檔案的許可權字串。

-f m,a-b:剪下第m個域和第a到b個域。cut -d: -f1, 4-6 /etc/passwd 獲取passwd檔案的域1、4、5、6。

-d sep:設定域分隔符為sep 如:cut -d: -f2-3, 6 /etc/passwd 獲取passwd檔案的域2、3、6。

awk可以同樣實現cut的抽取域的功能,但cut更方便快捷。

paste

paste可以將資料貼上在一起,用預設域分隔符tab分隔。其工作效果與cut相反。一般格式為:paste [-s|-d] file1 file2

-s 把每個檔案變成一行,而不是預設的按行貼上在一起。如:paste -d: -s myfile1 myfile2 則第一行為myfile1的內容,每行之間用:分開;第二行為myfile2的內容,第行間用:分開。

-d sep 改變域分隔符為sep。如:paste -d @ myfile1 myfile2 則按行,將myfile1和myfile2貼上在一起,中間用@隔開。

split

split將大檔案分隔成小檔案,一般格式為split [-size] inputfile [outfilename]

shell文字處理

最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...

shell 文字處理

最近優化指令碼,將幾套指令碼合併,比如,處理nand手機的指令碼和處理emmc手機的指令碼是不一樣的,這導致我們的指令碼有很多個版本。手機側只有busybox,所以不能使用功能強大的python來處理文字。花了半天時間,發現雖然語法比較怪異,但也能簡潔的完成任務。if e proc emmc the...

Shell的文字處理

1.grep定義 grep 命令是一種強大的文字搜尋工具,根據使用者指定的 模式 對目標文字進行匹配檢 查,列印匹配到的行 由正規表示式或者字元及基本文字字元所編寫的過濾條件 global search regular expression and print out the line 全面搜尋研究...