文字查詢(searching)與文字替換(substitution)是編寫shell指令碼時經常用到的兩個基本操作。
查詢文字
傳統上,有三種程式可以用來查詢整個文字檔案:grep, egrep(extended grep), fgrep(fast grep)。
grep最簡單的用法就是使用固定字串,例如who | grep -f cosette
可以查詢登陸名為cosette的使用者。
grep
語法: grep [options...] pattern-spec [files...]
用途:顯示匹配乙個或多個模式的文字行。通常作為管道的第一步。
主要選項:
-e %使用擴充套件正規表示式進行匹配
-f %使用固定字串進行匹配
-e pat-list %
-f pat-file %從pat-file檔案讀取模式作匹配
-i %模式匹配時忽略字母大小寫差異
-l %列出匹配模式的檔名稱
-q %靜默地
-s %不顯示錯誤資訊,通常與-q並用
-v %顯示不匹配模式的行
正規表示式
常用的正規表示式元字元
元字元(meta)
模式含義
\將下乙個字元標記符、或乙個向後引用、或乙個八進位制轉義符。例如,「\n」匹配\n。「\n」匹配換行符。序列「\」匹配「\」而「(」則匹配「(」。即相當於多種程式語言中都有的「轉義字元」的概念。
^匹配緊接著的正規表示式,在行或字串的起始處
$匹配前面的正規表示式,在行或字串的結尾處
.匹配任何單個的字元,但null除外
*匹配在它之前的任何數目(或沒有)的單個字元所以.*代表匹配任一字元的任意長度
匹配方括號內的任一字元
+匹配前面正規表示式的乙個或多個例項
?匹配前面正規表示式的零個或乙個例項
|匹配於|符號前或後的正規表示式
()匹配於括號括起來的正規表示式群
n是乙個非負整數。匹配確定的n次,注意在使用過程中是否需要使用轉義字元\
n是乙個非負整數。至少匹配n次
m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次
簡單的正規表示式匹配範例:
表示式匹配
tolstoy
位於任何一行上任何位置的7個字母:tolstoy
^tolstoy
7個字母tolstoy,出現在一行的開頭
tolstoy$
7個字母tolstoy,出現在一行的結尾
^tolstoy$
正好包括tolstoy這7個字母的一行,沒有其他的任何字元
[tt]olstoy
在一行的任意位置上,含有tolstoy或tolstoy
tol.toy
在一行的任意位置上,含有tol這3個字母,加上任何乙個字元,再接著toy3個字母
tol.*toy
在一行的任意位置中,含有tol這3個字母,加上任意的0或多個字元,在繼續toy這3個字母
posix方括號表示式:
posix是為了配合非英語環境,強化其字符集範圍的能力,另有額外的組成部分。:
基本正規表示式
匹配單個字元
匹配單個字元,一般有四種表示方式,一般字元,轉義的meta字元,.meta字元,還有方括號表示式。需要注意的是,在方括號表示式中,^放在字首表示取反。例[^aeiou]
指的就是小寫原因字元以外的任何字元。
後向引用
關於後向引用,我個人的理解是可以直接寫出前面出現過的正規表示式的位置直接使用。它的使用分為兩個部分,第一步, 將子表示式包圍在\(與\)裡,單個模式最多可包含9個子表示式,且可為巢狀結構。
第二步是在統一模式後使用\digital,digital指的是介於1到9之間的數字,指的是匹配於第n個先前方括號內子表示式匹配成功的字元。
例:模式
匹配成功
\(ab\)\(cd\)[def]*\2\1
abcdcdab abcdeeecdab abcd ddeeffcdab
\(why\).*\1
一行裡重現兩個why
\([[:alapha:]_]][[:alnum]_]*\)=\1;
簡易c/c++賦值語句
後向引用在尋找重複字以及匹配引號時特別好用:
\(["']\).*\1
匹配以單引號或雙引號括起來的字,例如」fool」,』bye』
shell的查詢與替換
shell中做查詢,grep是注定逃不開的。cat file grep austin 就是在文件中查詢austin所在行。grep和正規表示式匹配之後,查詢功能變得異常強大。這個時候,要保證對正規表示式異常熟悉才好。這樣的話,處理起一些問題來會更加得心應手。另外不得不提的兩個編輯器 sed和awk....
shell指令碼變數替換
bin bash variable 1 me i love you,do you love me girl i don t love you,go away n 從變數開頭進行匹配,將符合匹配最短的字串刪除 echo befor delete variable 1 var1 echo after d...
shell複習筆記 查詢與替換
查詢文件 以grep 程式查詢文字 匹配文字 matching text 相當方便.傳統上有三種程式可以用來查詢整個文字檔案.grep 語法 grep options pattern spec files 用途 現實匹配乙個或者多個模式的文字行.時常會作為管道 pipeline 的第一步,以便於對匹...