![linux操作系統(tǒng)10-shell編程(高級)_第1頁](http://file4.renrendoc.com/view/5d8a8638cbc364840959febaa81fc01c/5d8a8638cbc364840959febaa81fc01c1.gif)
![linux操作系統(tǒng)10-shell編程(高級)_第2頁](http://file4.renrendoc.com/view/5d8a8638cbc364840959febaa81fc01c/5d8a8638cbc364840959febaa81fc01c2.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Shell 高級編程Ch11 Shell高級編程主要內容11.1 正則表達式11.2 grep:正則搜索并打印11.3 awk:處理數據并生成報告11.4 sed:流編輯器示例1eg1:如果記錄以n或s開頭,就打印這個記錄。 grep:grep ns eg1 awk:awk /ns/print eg1 sed:sed n /ns/p eg111.1.1 正則表達式介紹使用s h e l l時,從一個文件中抽取多于一個字符串將會很麻煩。例如,在一個文本中抽取一個詞,它的頭兩個字符是大寫的,后面緊跟四個數字。如果不使用某種正則表達式,在s h e l l中將非常難實現這個操作。11.1.1 正則表
2、達式介紹正則表達式是一種可以用于模式匹配和替換的強大工具,我們可以在很多unix程序中找到正則表達式的身影,例如vi,perl,php,awk,sed,emacs,grep等。正則表達式常見的應用場合是驗證用戶輸入是否合法,例如:驗證郵件地址是否符合“xxxxxx.xxx”的模式,其中x字符是字母,數字,下劃線,小數點或減號,郵件地址的每一部分可以有一個或多個x字符。再比如驗證IP地址時候符合“yyy.yyy.yyy.yyy”的模式11.1.1 基本字符 匹配行首$ 匹配行尾* 一個單字符后緊跟*,匹配0個或多個此單字符 匹配 內字符。可以是一個單字符,也可以是字符序列??梢允褂?表示 內字符
3、序列范圍,如用 1 - 5 代替 1 2 3 4 5 用來屏蔽一個元字符的特殊含義。因為有時在s h e l l中一些元字符有特殊含義??梢允蛊涫幸饬x. 匹配任意單字符p a t t e r n n 用來匹配前面p a t t e r n出現次數。n為次數p a t t e r n n, 含義同上,但次數最少為np a t t e r n n,m 含義同上,但p a t t e r n出現次數在n與m之間11.1.2 練習1ex1:1.打印所有以a開頭的行2.打印所有以a開頭、包含數字的行3.打印所有以a開頭、后面只包含數字或不含任何字符的行grep a ex1grep a.*0-9.*
4、 ex1grep a0-9*b ex111.2 grep相信grep是UNIX和LINUX中使用最廣泛的命令之一。grep(全局正則表達式版本)允許對文本文件進行模式查找。如果找到匹配模式, grep打印包含模式的所有行。grep支持基本正則表達式,也支持其擴展集。grep有三種變形,即:grep:標準grep命令,本章大部分篇幅集中討論此格式。egrep:擴展grep,支持基本及擴展的正則表達式,與之相對應的一些更加規(guī)范的模式,這里也不予討論。fgrep:fast (fixed) grep。允許查找字符串而不是一個模式。單詞fast,是不是比grep速度要快?11.2.1 grepgrep一
5、般格式為:grep 選項基本正則表達式文件這里基本正則表達式可為字符串。在grep命令中輸入字符串參數時,最好將其用單引號或雙引號括起來。例如:m y s t r i n g。這樣做有兩個原因,一是以防被誤解為s h e l l命令,二是可以用來查找多個單詞組成的字符串。shell 對單引號里的內容不轉義,對雙引號里的內容轉義,shell處理后在給grep,例如:grep “” datafile 等價于 grep datafile11.2.1 grep選項常用的grep選項有:-c 只輸出匹配行的計數。-i 不區(qū)分大小寫。-h 查詢多文件時不顯示文件名。-l 查詢多文件時輸出包含匹配字符的文件
6、名。-n 顯示匹配行及行號。-s 不顯示不存在或無匹配文本的錯誤信息。-v 顯示不包含匹配文本的所有行。11.2.2 常用正則表達式舉例行首$行尾SsignaLl匹配單詞signal、signaL、Signal、SignaL(man|MAY)包含may的大寫或小寫的行USER$只包含USER的行tty$以tty結尾的行.帶句點的行.*00之前(或之后)有任意字符000*連續(xù)兩個以上0the以the開頭的行IiI或iIiNnIN、In、iN或in$空行.*$匹配行中任意字符串a-zA-Z任意字母a-za-z*至少一個字母$包含6個字符的行0-9$非數字及美元符號0-9a-zA-Z非數字及字母12
7、31至3中一個數字DdeviceDevice 或 deviceDe.ce前兩個字母為De,后面跟兩個任意字符,最后為ce11.2.2 常用正則表達式舉例常用正則表達式舉例q以q開頭的行.$僅有1個字符的行.0-92以一個句點和兩個數字開頭的行0-92-0-92-0-94*日期0-93. 0-93. 0-93. 0-93*IP地址11.2.2 常用正則表達式舉例11.2.3 示例2eg2找出文件中郵件中合法的郵箱地址;找出126或163或gmail郵箱地址: grep a-zA-Z0-9.-_*a-zA-Z0-9.-_*.a-zA-Z0-9.-_* eg2grep a-zA-Z0-9.-_*(g
8、mail|126|163).com* eg211.2.3 示例3eg3找出126或163或gmail郵箱總共的行數找出126或163或gmail郵箱并顯示其行數找出當前目錄下所有包含126郵箱的文件grep c a-zA-Z0-9.-_*(gmail|126|163).com* eg2grep n a-zA-Z0-9.-_*(gmail|126|163).com* eg2grep l a-zA-Z0-9.-_*(gmail|126|163).com* *11.2.4 練習ex2:1. Print all lines containing the string San.2. Print all
9、lines where the persons first name starts with J.3. Print all lines ending in 700.4. Print all lines that dont contain 834.5. Print all lines where birthdays are in December.11.2.4 練習ex2:6. Print all lines where the phone number is in the 408 area code.7. Print all lines containing an uppercase lett
10、er, followed by four lowercase letters, a comma, a space, and one uppercase letter.8. Print lines where the last name begins with K or k.9. Print lines preceded by a line number where the salary is a six-figure number.10. Print lines containing Lincoln or lincoln (remember that grep is insensitive t
11、o case).11.3.1 awkawk命令,要格式化報文或從一個大的文本文件中抽取數據包。整體來說, a w k是所有s h e l l過濾工具中最難掌握復雜的語法含義不明確的錯誤提示信息。11.3.2 示例eg4df | awk print $1 tt $5打印第一列和第五列,中間用兩個Tab隔開11.3.3 打印選擇的域awk 中的 print 命令把輸入文件中選擇的數據輸出。 當 awk 讀取文件的一行,根據指定的 輸入域分隔符 把行分開, FS,awk 的一個環(huán)境變量。它被預先定義為一個或者多個空格或者制表符。 變量 $1, $2, $3, ., $N 把輸入行的第一第二第三直到最
12、后一個域保存起來。變量 $0 把整行的值保存起來。在下面的圖片描述中,我們看到 df 命令輸出有6欄。 11.3.3 輸入域的分隔符域分隔符,既不是一個單獨的字符也不是一個普通的表達式,是控制 awk 把一個輸入分割成幾個域。輸入記錄按分割定義進行字符順序掃描;域就是在相符的那些文字中間的那部分。 域分隔符代表內建的變量 FS。 域分隔符變量的值可以在 awk 程序中用賦值操作符 = 來改變。通常最好的執(zhí)行時間是一開始也就是還沒有處理任何輸入的時候,因此第一個記錄就被隨合適的分隔符一起讀取。使用特殊的 BEGIN 。 awk BEGIN FS=: print $1 t $7 /etc/pass
13、wd11.3.3 輸入域的分隔符11.3.4 示例eg5awk BEGIN FS=: printf username:%st,$1;printf home:%sn,$7 /etc/passwd11.4.1 sed命令sed是一個非交互性文本流編輯器。它編輯文件或標準輸入導出的文本拷貝。標準輸入可能是來自鍵盤、文件重定向、字符串或變量,或者是一個管道的文本。使用sed實現的一個重要功能是在另一個系統(tǒng)中下載的文件中剔除控制字符sed不修改源文件。除非使用重定向功能11.4.2 定址定義:決定對哪些行進行編譯形式:數字或表達式(默認處理所有行)數字代表行號;$指最后一行;m,n形式表似處理m行至n行定址后可以打印、刪除、修改等11.4.2 定址eg sed 1,3d 11.4.3 命令與選項11.4.3 命令與選項n 不打
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子商務在新農村發(fā)展中的網絡技術支持
- 賽摩電氣2025年經營風險報告-智澤華
- 知識版權對在線學習平臺的影響分析
- 2025年中國食糖產業(yè)園區(qū)行業(yè)市場全景調研及投資規(guī)劃建議報告
- 大別山地區(qū)搖蚊亞科(雙翅目-搖蚊科)昆蟲多樣性及分布規(guī)律的研究
- 雙母線直流微電網級聯小信號穩(wěn)定性研究
- 基于混合預測模型的交通流問題研究
- 克拉司酮的高效酶法合成
- 兒童紅皮病型銀屑病的臨床特征及療效分析
- 能源管理合規(guī)性評價報告
- 醫(yī)美注射類知識培訓課件
- 2025年學校春季開學典禮校長講話致辭 (匯編11份)
- 2025年廣電網絡公司工作計劃(3篇)
- 2025年餐飲部主管年度工作計劃
- 貨運車輛駕駛員服務標準化培訓考核試卷
- 學工管理系統(tǒng)功能設計方案
- 銀行行長2024年個人年終總結
- 財務BP經營分析報告
- 《磺化過程》課件
- 設備基礎預埋件施工方案
- 2024年全國統(tǒng)一高考英語試卷(新課標Ⅰ卷)含答案
評論
0/150
提交評論