




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
LinuxShell自動化運維初九年級數(shù)學(xué)教案教學(xué)設(shè)計課程名稱:LinuxShell自動化運維__________授課年級:___________________________授課學(xué)期:___________________________教師姓名:___________________________二零XX年零三月零一日課程名稱第六章正則表達式計劃學(xué)時四學(xué)時內(nèi)容分析本章主要介紹正則表達式概念,正則表達式元字符,正則表達式語法,正則表達式運算符優(yōu)先級,正則表達式匹配規(guī)則,grep命令教學(xué)目地與教學(xué)要求要求學(xué)生了解正則表達式概念,熟悉正則表達式元字符,熟悉正則表達式語法,熟練正則表達式運算符優(yōu)先級,熟悉正則表達式匹配規(guī)則,熟悉正則表達式應(yīng)用方法教學(xué)重點正則表達式元字符,正則表達式語法,正則表達式運算符優(yōu)先級,正則表達式匹配規(guī)則,grep命令教學(xué)難點正則表達式元字符,正則表達式語法,正則表達式運算符優(yōu)先級,正則表達式匹配規(guī)則,grep命令教學(xué)方式課堂講解及ppt演示教學(xué)過程第一課時(正則表達式概念,正則表達式元字符,正則表達式語法,正則表達式運算符優(yōu)先級,正則表達式匹配規(guī)則)回顧內(nèi)容,引出本課時主題回顧內(nèi)容,引出本課時主題。上面兩節(jié)學(xué)了Shell編程函數(shù)地用法有關(guān)內(nèi)容,本節(jié)開始正則表達式地有關(guān)內(nèi)容講解。正則表達式(RegularExpression,在代碼常簡寫為regex,regexp或RE),又稱規(guī)則表達式。正則表達式就是處理字符串地方法,以行為單位行字符串地處理,通過一些特殊符號地輔助,讓用戶達到查找,刪除,替換等目地。例如,Perl就內(nèi)建了一個功能強大地正則表達式引擎。正則表達式這個概念最初是由UNIX地工具(如sed與grep)普及開地。正則表達式通常縮寫成regex,單數(shù)有regexp,regex,復(fù)數(shù)有regexps,regexes,regexen。本節(jié)著重講解正則表達式概念,正則表達式元字符,正則表達式語法,正則表達式運算符優(yōu)先級與正則表達式匹配規(guī)則,從而引出本節(jié)地內(nèi)容。明確學(xué)目地能夠理解正則表達式概念能夠熟悉正則表達式元字符能夠理解正則表達式語法能夠理解正則表達式運算符優(yōu)先級能夠熟悉基本模式匹配能夠熟悉字符簇知識講解正則表達式概念正則表達式是對字符串行操作地一種邏輯公式,就是用事先定義好地一些特定字符,組成一個"規(guī)則字符串",用這個"規(guī)則字符串"來完成對字符串地一種過濾操作。正則表達式用于在查找過程匹配指定地字符。在大多數(shù)程序里,正則表達式都被置于兩個正斜杠之間,例如,/I[oO]ve/就是由斜杠界定地正則表達式,斜杠匹配被查找地行任何位置出現(xiàn)地相同內(nèi)容。在正則表達式,元字符是重要地概念。正則表達式元字符正則表達式由普通字符與元字符(Metacharacters)組成。普通字符包括大小寫地字母與數(shù)字,而元字符則具有特殊地意義。元字符表達地是不同于字面本身地意義。元字符通常由各種執(zhí)行模式匹配操作地程序(如vi,grep,sed,awk,python)來解析,下面會給予解釋。在最簡單地情況下,一個正則表達式看上去就是一個普通地查找模式。例如,正則表達式"testing"沒有包含任何元字符,它可以匹配"testing"與"testing一二三"等字符串,但不能匹配"Testing"。想真正用好正則表達式,正確理解元字符是很有必要地。元字符描述如表所示。元字符描述\將下一個字符標記符,或一個后向引用,或一個八制轉(zhuǎn)義符。例如,"\\n"匹配\n。"\n"匹配換行符。序列"\\"匹配"\"而"\("則匹配")"。即相當于多種編程語言都地"轉(zhuǎn)義字符"地概念。例如:love\.^匹配輸入字行首。例如:^love,如果設(shè)置了RegExp對象地Multiline屬,^也匹配"\n"或"\r"之后地位置。$匹配輸入行尾。例如:love$,如果設(shè)置了RegExp對象地Multiline屬,$也匹配"\n"或"\r"之前地位置。*匹配前面地子表達式任意次。例如,zo*能匹配"z",也能匹配"zo"以及"zoo"。*等價于{零,}+匹配前面地子表達式一次或多次(大于等于一次)。例如,"zo+"能匹配"zo"以及"zoo",但不能匹配"z"。+等價于{一,}。?匹配前面地子表達式零次或一次。例如,"do(es)?"可以匹配"do"或"does"。?等價于{零,一}{n}n是一個非負整數(shù)。匹配確定地n次。例如,"o{二}"不能匹配"Bob"地"o",但是能匹配"food"地兩個o。{n,}n是一個非負整數(shù)。至少匹配n次。例如,"o{二,}"不能匹配"Bob"地"o",但能匹配"foooood"地所有o。"o{一,}"等價于"o+"。"o{零,}"則等價于"o*"。{n,m}m與n均為非負整數(shù),其n<=m。最少匹配n次且最多匹配m次。例如,"o{一,三}"將匹配"fooooood"地前三個o為一組,后三個o為一組。"o{零,一}"等價于"o?"請注意在逗號與兩個數(shù)之間不能有空格。?當該字符緊跟在任何一個其它限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪地。非貪婪模式盡可能少地匹配所搜索地字符串,而默認地貪婪模式則盡可能多地匹配所搜索地字符串。例如,對于字符串"oooo","o+"將盡可能多地匹配"o",得到結(jié)果["oooo"],而"o+?"將盡可能少地匹配"o",得到結(jié)果[‘o’,’o’,’o’,’o’]。."點"匹配除"\n""\r"之外地任何單個字符。例如:l..e。(pattern)匹配pattern并獲取這一匹配。所獲取地匹配可以從產(chǎn)生地Matches集合得到,在VBScript使用SubMatches集合,在JScripts使用$零…$九屬。要匹配圓括號字符,請使用"\("或"\)"。x|y匹配x或y。例如,"z|food"能匹配"z"或"food"(此處請謹慎)。"[zf]ood"則匹配"zood"或"food"。[xyz]字符集合。匹配所包含地任意一個字符。例如,"[abc]"可以匹配"plain"地"a"。例如:[a-z零-九]ove[^xyz]負值字符集合。匹配未包含地任意字符。例如,"[abc]"可以匹配"plain"地"plin"任一字符。例如:[^a-z零-九]ove[a-z]字符范圍。匹配指定范圍內(nèi)地任意字符。例如,"[a-z]"可以匹配"a"到"z"范圍內(nèi)地任意小寫字母字符。注意:只有連字符在字符組內(nèi)部時,并且出現(xiàn)在兩個字符之間時,才能表示字符地范圍;如果出字符組地開頭,則只能表示連字符本身。\b匹配一個單詞地邊界,也就是指單詞與空格間地位置(即正則表達式地"匹配"有兩種概念,一種是匹配字符,一種是匹配位置,這里地\b是匹配位置地)。例如,"er\b"可以匹配"never"地"er",但不能匹配"verb"地"er";"\b一_"可以匹配"一_二三"地"一_",但不能匹配"二一_三"地"一_"。\B匹配非單詞邊界。"er\B"能匹配"verb"地"er",但不能匹配"never"地"er"。\cx匹配由x指明地控制字符。例如,\匹配一個Control-M或回車符。X地值需要為A-Z或a-z之一。否則,將c視為一個原義地"c"字符。\d匹配一個數(shù)字字符。等價于[零-九]。grep要加上-P,perl正則支持。\D匹配一個非數(shù)字字符。等價于[^零-九]。grep要加上-P,perl正則支持。\f匹配一個換頁符,等價于\x零c與\cL。\n匹配一個換行符。等價于\x零a與\cJ。\r匹配一個回車符。等價于\x零d與\。\s匹配任何不可見字符,包括空格,制表符,換頁符等等。等價于[\f\n\r\t\v]\S匹配任何可見字符。等價于[^\f\n\r\t\v]。\t匹配一個制表符。等價于\x零九與\cl。\v匹配一個垂直制表符。等價于\x零b與\cK。\w匹配包括下劃線地任何單詞字符。類似但不等價于"[A-Za-z零-九_]",這里地"單詞"字符使用Unicode字符集。\W匹配任何非單詞字符。等價于"[^A-Za-z零-九_]"。\<\>匹配詞(word)地開始(\<)與結(jié)束(\>)。例如正則表達式\<the\>能夠匹配字符串"forthewise"地"the",但是不能匹配字符串"otherwise"地"the"。注意:這個元字符不是所有地軟件都支持地。例如:\<lovelove\>正則表達式語法正則表達式是由普通字符(如字符a到z)及特殊字符(稱為"元字符")組成地文字模式。模式描述在搜索文本時要匹配地一個或多個字符。正則表達式作為一個模板,將某個字符模式與所搜索地字符串行匹配。要想達到熟練使用正則表達式元字符,就要熟悉最基本地語法模式匹配。語法匹配描述如表所示。元字符描述^表示匹配字符串地開始位置,注意:用在括號[]時,可以理解為取反,表示不匹配括號字符串。$表示匹配字符串地結(jié)束位置。*表示匹配零次到多次。+表示匹配一次到多次(至少一次)。?表示匹配零次或一次。.表示匹配單個字符。|表示為或者,兩項取一項。()小括號表示匹配括號全部字符。[]括號表示匹配括號地一個字符,范圍描述。如:[零-九a-zA-Z]{}大括號用于限定匹配次數(shù)。如{n}表示n個字符,{n,}表示至少匹配n個字符,{n,m}表示至少n,最多m。\轉(zhuǎn)義符。如上基本符合匹配都需要轉(zhuǎn)義字符,如:\*表示匹配*號。構(gòu)建正則表達式地方法與數(shù)學(xué)表達式地方法一樣,也就是用多種元字符與運算符可以將小地表達式結(jié)合在一起來創(chuàng)建更大地表達式。正則表達式可以是單個字符,字符集合,字符范圍,字符間地選擇等任意組合。正則表達式運算符優(yōu)先級正則表達式從左到右行計算,并遵循優(yōu)先級順序,這與算術(shù)表達式非常類似。相同優(yōu)先級地正則表達式從左到右行運算,不同優(yōu)先級地正則表達式運算先高后低。運算符優(yōu)先級順序如表所示。運算符描述\轉(zhuǎn)義符()(?:)(?=)[]圓括號與方括號*表示匹配零次到多次。+*?{n}{n,}{n,m}限定符^$\任何元字符,任何字符定位點與序列(即:位置與順序)|替換,"或"字符具有高于替換運算符地優(yōu)先級,使得"m|food"匹配"food"。若要匹配"mood"或"food",請使用括號創(chuàng)建子表達式,從而產(chǎn)生"(m|f)ood"運算符描述\轉(zhuǎn)義符()(?:)(?=)[]圓括號與方括號*表示匹配零次到多次。+*?{n}{n,}{n,m}限定符基本模式匹配模式是正則表示式最基本地元素,它是一組描述字符串特征地字符集,用于匹配字符串。例如:^love這個模式包含一個特殊地字符^,表示該模式只匹配那些以love開頭地字符串。該模式與字符串"lovewe",與"Iloveyou"不匹配。正如^符號表示開頭一樣,$符號表示用來匹配哪些以給定模式結(jié)尾地字符串。man$這個模式與"policeman"匹配,與policy不匹配。字符^與$同時使用時,表示精確匹配(字符串與模式一樣)。例如:只匹配字符串"bash"。^bash$稍微復(fù)雜地字符,如標點符號與白字符(空格,制表符等),要用到轉(zhuǎn)義符。所有地轉(zhuǎn)義序列都用反斜杠(\)打頭。制表符地轉(zhuǎn)義序列是\t。如果要檢測一個字符串是否以制表符開頭,可以用如下模式。^\t類似地,用"\n"表示"新行","\r"表示"回車"。字符簇在程序,要判斷輸入地電話號碼,地址,EMAIL地址,信用卡號碼等是否有效,用普通基于字面地字符是不夠地。因此需要使用相應(yīng)地字符模式地方法來描述,它就是字符簇。具體表示如下:[AaEeIiOoUu]這個模式與任何字符匹配,但只能表示一個字符。用連字符可以表示一個字符地范圍,例如:[a-z]#匹配所有地小寫字母[A-Z]#匹配所有地大寫字母[a-zA-Z]#匹配所有地字母[零-九]#匹配所有地數(shù)字同樣,這些也只表示一個字符,這是非常重要地。如果要匹配一個由一個小寫字母與一個數(shù)字組成地字符串,如是"z二","t六"或"g七",但不是"ab二","r二d三"或"b五二",可以使用如下模式:^[a-z][零-九]$盡管[a-z]代表二六個字母地范圍,但在這里它只能與第一個字符是小寫字母地字符串匹配。^除表示字符串地開頭,它還有另外一個意義。當在一組方括號里使用^時,它表示"非"或"排除"地意思,常常用來剔除某個字符。^[^零-九][零-九]$#第一個字符不能是數(shù)字[^a-z]#除了小寫字母以為地所有字符[^$]#空行正則表達式POSIX字符簇如表所示。字符簇描述[[:alnum:]]字母與數(shù)字字符。例如:[[:alnum:]]+[[:alpha:]]字母字符(包括大小寫字母)。例如:[[:alpha:]]{四}[[:blank:]]空格與制表符。例如:[[:blank:]]*[[:digit:]]數(shù)字字母。例如:[[:digit:]]?[[:lower:]]小寫字母。例如:[[:lower:]]{五,}[[:upper:]]大寫字母。例如:[[:upper:]]+[[:punct:]]標點符號。例如:[[:punct:]][[:space:]]包括換行符,回車等在內(nèi)地所有空白。例如:[[:space:]]+但更多地情況下,可能要匹配一個單詞或一組數(shù)字。一個單詞有若干個字母組成,一組數(shù)字有若干個單數(shù)組成。跟在字符或字符簇后面地花括號({})用來確定前面地內(nèi)容重復(fù)出現(xiàn)地次數(shù)。幾個簡單地字符簇如表所示。字符簇描述^[a-zA-Z_]$所有地字母與下劃線。^[[:alpha:]]{三}$所有地三個字母地單詞。^a$字母a。^a{四}$aaaa^a{二,四}$aa,aaa或aaa^a{一,三}$a,aa或aaa^a{二,}$包含多于兩個a地字符串^a{二,}如:aardvark與aaab,但apple不行a{二,}如:baad與aaa,但Nantucket不行\(zhòng)t{二}兩個制表符.{二}所有地兩個字符這些例子描述了花括號地三種不同地用法。一個數(shù)字{x}表示前面地字符或字符簇只出現(xiàn)x次;一個數(shù)字加逗號{x,}表示前面地內(nèi)容出現(xiàn)x或更多地次數(shù);兩個數(shù)字用逗號分隔地數(shù)字{x,y}表示前面地內(nèi)容至少出現(xiàn)x次,但不超過y次??梢园涯J綌U展到更多地單詞或數(shù)字。具體如下所示:^[a-zA-Z零-九_]{一,}$#所有包含一個以上地字母,數(shù)字或下劃線地字符串^[一-九][零-九]{零,}$#所有地正整數(shù)^\-{零,一}[零-九]{一,}$#所有地整數(shù)^[-]?[零-九]+\.?[零-九]+$或^\-?[零-九]{一,}\.?[零-九]{一,}$#所有地浮點數(shù)特殊字符?與{零,一}是相等地,它們都代表零個或一個前面地內(nèi)容。特殊字符*與{零,}是相等地,它們都代表零個或多個前面地內(nèi)容。最后,字符+與{一,}是相等地,表示一個或多個前面地內(nèi)容,上面地四個例子可以寫成:^[a-zA-Z零-九_]+$#所有包含一個以上地字母,數(shù)字或下劃線地字符串^[一-九][零-九]*$#所有地正整數(shù)^\-{零,一}[零-九]+$#所有地整數(shù)^[-]?[零-九]+(\.[零-九]+)?$#所有地浮點數(shù)第二課時(grep命令)內(nèi)容回顧回顧上節(jié)內(nèi)容,引出本課時主題。上節(jié)已經(jīng)介紹了正則表達式概念,正則表達式元字符,正則表達式語法,正則表達式運算符優(yōu)先級,正則表達式匹配規(guī)則,下面將介紹grep命令,從而引出本節(jié)內(nèi)容。明確學(xué)目地能夠理解grep命令簡介能夠熟悉grep命令語法格式能夠熟悉grep命令使用方式能夠理解grep命令結(jié)合正則表達式使用能夠理解grep命令結(jié)合正則表達式案例實戰(zhàn)知識講解gerp命令簡介接下來講述Linuxgrep與正則表達式地使用。Linuxgrep與正則表達式使用首先要了解grep命令。grep命令是一種強大地文本搜索工具,它能使用正則表達式搜索文本,在文件全局查找指定地正則表達式,并打印所有包含該表達式地行。通常grep有三種版本,即grep,egrep(等同于grep-E)與fgrep。egrep為擴展地grep,其支持更多地正則表達式元字符。fgrep則為快速grep(固定地字符串對文本行搜索,不支持正則表達式地引用但查詢極為快速),它按字面解釋所有地字符。grep是Linux文本處理工具地三劍客之一。grep命令語法格式grep命令地語法格式為:grep[OPTIONS選項]PATTERN[FILENAMEFILENAME……]例如:[root@tianyun~]#grep'Tom'/etc/passwd[root@tianyun~]#grep'bashshell'/etc/test返回狀態(tài)為:找到匹配地表達式:grep返回地退出狀態(tài)為零沒找到匹配地表達式:grep返回地退出狀態(tài)為一找不到指定文件:grep返回地退出狀態(tài)為二grep程序地輸入可以來自標準輸入或管道,而不僅僅是文件,具體參見例六-一。grep命令使用方式grep常見選項如下:-i,--ignore-case忽略字符地大小寫-l,--files-with-matches只列出匹配行所在地文件名-n,--line-number在每一行前面加上它在文件地相對行號-c,--count顯示成功匹配地行數(shù)-s,--no-messages禁止顯示文件不存在或文件不可讀地錯誤信息-o,--only-matching僅顯示匹配到地字符串本身-v,--invert-match反復(fù)查找,只顯示不被模式匹配到地行-R,-r,--recursive遞歸針對目錄--color顏色-q,--quiet,--silent靜默模式--quiet,--silent即不輸出任何信息-A,--after-context=NUMprintNUMlinesoftrailingcontext顯示被模式匹配地行及其后#行-B,--before-context=NUMprintNUMlinesofleadingcontext顯示被模式匹配地行及其前#行-C,--context=NUMprintNUMlinesofoutputcontext顯示別模式匹配地行及其前后各#行-G支持基本正則表達式針對"—color"選項,在.bashrc或者.bash_profile文件加入:aliasgrep=grep–color=auto,生效后,grep地搜索結(jié)果自動高亮匹配。針對"搜索字符串"選項,使用正則表達式時需要用單引號’’括起來,避免與Shell地元字符沖突。結(jié)合grep與正則表達式,能快速準確地找到希望匹配到地字符串與行,提高工作效率,grep常見地用法參見例六-二。grep命令結(jié)合正則表達式使用grep一般結(jié)合基本正則表達式使用,grep字符匹配如表所示。元字符描述[:digit:]或[零-九]匹配任意單個字符[:lower:]或[a-z]匹配任意單個小寫字母[:upper:]或[A-Z]匹配任意單個大寫字母[:alpha:]或[a-zA-Z]匹配任意單個大寫字母或小寫字母[:alnum:]或[零-九a-zA-Z]匹配任意單個字母或數(shù)字每一類正則表達式本身地表達式是需要用戶去寫地,但表達式地元字符都有著固定地或者特定地意義,可以根據(jù)需要去理解或組合字符,生成模式,grep次數(shù)匹配元字符如表所示。元字符描述^錨定行首$錨定行尾.匹配任意一個字符*匹配零個或多個字符\?匹配其前面地字符零次或者一次\+匹配其前面地字符一次或者多次\{m\}匹配其前面地字符m次(\為轉(zhuǎn)義符)\{m,n\}匹配其前面地字符至少m次,至多n次[]匹配一個指定范圍內(nèi)地字符,而"[^]"匹配指定范圍外地任意單個字符\<或\b錨定詞首,\>或\b錨定詞尾(可用\<PATTERN\>:匹配完整單詞)\(\)將多個字符當做一個整體行處理\一模式從左側(cè)起,第一個左括號及與之匹配地右括號之間模式匹配地內(nèi)容\二模式從左側(cè)起,第二個左括號及與之匹配地右括號之間模式匹配到地內(nèi)容\w所有地字母與數(shù)字,稱為字符[a-zA-Z零-九]\W所有字母與數(shù)字之外地字符,稱為非字符[^a-zA-Z零-九].*匹配任意長度地任意字符其"\一","\二"s是后向引用,引用前面地分組括號地模式所匹配到地字符。在某行文本地檢查,如果使用"\(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 63438:2024 EN Railway applications - Fixed installations - Protection principles for AC and DC electric traction power supply systems
- 2025-2030年中國鍋爐制造行業(yè)運營狀況及發(fā)展規(guī)劃分析報告
- 2025-2030年中國鏟運機市場發(fā)展現(xiàn)狀及前景趨勢分析報告
- 2025-2030年中國鉛鋅冶煉市場運營狀況及發(fā)展策略研究報告
- 2025山西省建筑安全員B證(項目經(jīng)理)考試題庫
- 2025年青海省安全員-C證考試(專職安全員)題庫附答案
- 2025-2030年中國虹膜識別機系統(tǒng)市場經(jīng)營狀況及發(fā)展建議分析報告
- 2025年天津市安全員《A證》考試題庫
- 2025-2030年中國相容劑行業(yè)發(fā)展現(xiàn)狀及投資規(guī)劃研究報告
- 加強師德師風(fēng)建設(shè)學(xué)校師德師風(fēng)警示教育講座培訓(xùn)課件
- 豬飼料購銷合同書
- 常用小學(xué)生詞語成語積累歸類大全
- 七種不同樣式的標書密封條
- 全國水利工程監(jiān)理工程師培訓(xùn)教材質(zhì)量控制
- 中國傳統(tǒng)成語故事(英文版)
- 鑄造廠總降壓變電所及廠區(qū)配電系統(tǒng)設(shè)計
- 航拍中國優(yōu)秀課件
- 《做自己的心理醫(yī)生 現(xiàn)代人的心理困惑和自我療愈策略》讀書筆記思維導(dǎo)圖PPT模板下載
- 小學(xué)音樂組集體備課計劃
- 稿件修改說明(模板)
評論
0/150
提交評論