《鳥哥的Linux私房菜—基礎學習篇》正則表達式與文件格式化處理
正則表達式:處理字符串的方法,以行為單位進行字符串的處理行為,正則表達式通過一些特殊符號的輔助,讓用戶輕易達到查找、刪除、替換某特定字符串的處理程序。
www.2cto.com
正則表達式基本上是一種“表示法”,只要工具程序支持這種表示法,那麼該工具程序就可以用來作為正則表達式的字符串處理之用。
基礎正則表達式
語系對正則表達式的影響;
LANG=C時:0 1 2 3 4 。。。 A B C D … Z a b c d 。。。 z
LANG=zh_CN時:0 1 2 3 4 … a A b B c C d D … z Z
使用正則表達式時,需要特別留意當時的環境語系,否則會發現與別人不同的選取結果
為了避免編碼所造成的英文與數字選取的問題,特殊符號:
www.2cto.com
[:alnum:] 英文大小寫字符及數字
[:alpha:]英文大小寫字符
[:upper:]英文大寫字符
[:lower:]英文小寫字符
[:digit:]數字
grep [-A] [-B] [—color==auto] ‘搜尋的字符串’filename
參數:
-A:後面可加數字,為after的意思,除了列出該行外,後續的n行也列出來
-B:後面可加數字,為befor的意思,除了列出該行外,前面的n行也列出來
語系已經使用“export LANG=C”的設置值
grep已經使用alias設置成為“grep –-color==auto”
查找特定的字符串
利用中括號[]來查找集合字符
行首和行尾字符^$
^符號在字符集和符號(中括號[])之內和之外是不同的,在[]內代表“反向選擇”,在[]之外代表定位在行首
找出空白行:^$(只有行首和行尾)
任意一個字符.(小數點):代表一定有一個任意字符
與重復字符*(星號):代表重復前一個字元,0到無窮多次的意思
“.*”代表零個或任意多個字符的意思
限定連續RE字符的范圍{}:必須使用轉義字符 \
正則表達式的特殊字符與一般在命令行輸入命令的“通配符”並不相同
sed工具
sed [-nefr] 動作
參數:
-n:使用安靜模式,在一般sed用法中,所有來自STDIN的數據一般都會列出到屏幕上,但如果加上參數-n後,則只有經過sed特殊處理的哪一行(或操作)才會被列出來
-e:直接在命令行模式上進行sed的動作編輯
-f:直接將sed的動作寫在一個文件內,-f filename則可以執行filename內的sed動作
-r:sed的動作支持擴展型正則表達式語法(默認是基礎型正則表達式語法)
-i:直接修改讀取的文件內容,而不是由屏幕輸出
動作說明:
[n1,[n2]] function
n1,n2:一般代表選擇進行動作的行數
function有如下參數:
a:新增
c:替換
d:刪除
i:插入
p:打印
s:替換,’s/要被替換的字符/新的字符串/g’
sed後邊接的動作,務必以“兩個單引號括住
$代表最後一行
新增好幾行的時候,每一行中間必須要以反斜槓來進行新行的增加
awk:好用的數據處理工具
sed常常作用於一整行的處理,awk比較傾向於將一行分成數個”字段“來處理。因此,awk相當適合處理小型的數據處理
awk ‘條件類型1[動作1]條件類型2[動作2]…’filename
awk主要處理每一行的字段內的數據,而默認的字段的分隔符為空格鍵或[Tab]鍵
每一行的每一個字段都有變量名稱,$1,$2。$0代表一整行數據的意思
整個awk的處理流程是:
讀入第一行,並將第一行的數據填入變量名稱中
依據條件類型的限制,判斷是否需要進行後面的操作
做完所有的動作與條件類型
若還有後續的”行“的數據,重復以上1~3步驟,直到所有的數據都讀完為止
awk以行為一次處理的單位,而以字段為最小處理的單位
awk內置變量:
NF:每一行擁有的字段總數
NR:目前awk所處理的是”第幾行“的數據
FS:目前的分隔符,默認是空格鍵
awk邏輯運算符:> < >= <= == !=
所有awk的動作,即在{}內的動作,如果有需要多個命令輔助時,可利用分號;間隔,或者直接以【enter】鍵來隔開每個命令
邏輯運算當中,如果是”等於“的情況,務必使用==
格式化輸出時,在printf的格式設置中,務必加上\n,才能進行分行
變量可以直接使用,不需要加上$號
文件比較工具
同一個軟件的不同版本之間,比較配置文件與源文件的區別。
www.2cto.com
diff:以行為單位比較,一般用在ASCII純文本文件的比較上。通常是用在同一的文件(或軟件)的新舊版本區別
diff [-bBi] from-file to-file
參數:
-b:忽略一行當中僅有多個空白的區別
-B:忽略空白行的區別
-i:忽略大小寫
cmp [-s] file1 file2
主要利用”字節“單位去比較
參數:
-s:將所有不同點的字節都列出來,因為cmp默認僅會輸出第一個發現的不同點
patch
將區別文件制作成補丁文件:
dif –Naur 舊文件 新文件 > *.patch
更新:patch –pN < patch_file
還原:patch –R –pN < patch_file
參數:
-p:後面的N表示取消幾層目錄
-R:代表還原,將新的文件還原成舊的版本
文件打印准備:pr