培訓(xùn)課件及-3unix shell實(shí)例精解學(xué)習(xí)筆記_第1頁
培訓(xùn)課件及-3unix shell實(shí)例精解學(xué)習(xí)筆記_第2頁
培訓(xùn)課件及-3unix shell實(shí)例精解學(xué)習(xí)筆記_第3頁
培訓(xùn)課件及-3unix shell實(shí)例精解學(xué)習(xí)筆記_第4頁
培訓(xùn)課件及-3unix shell實(shí)例精解學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章關(guān)于UNIX 通訊。常見的s有Cs、Bs和Korns(Bs的超集s主要功解釋交互運(yùn)行時(shí),在命令行提示下敲入制訂用戶環(huán)境,通常在s

^$.l,后跟兩個(gè)字配*0/跟0與其中的一個(gè)相匹與包含loveLove[x-與集中一個(gè)范圍內(nèi)/[A-與后面跟oveAZ與不在集里的字符/[^A-\love詞標(biāo)志與以后用的字Able9個(gè)標(biāo)志lovel,以后作\l;在這個(gè)例lover字符xm至少mmno表% Ihadalovelytimeonourlittle us,ohlove|ChristianScottliveshereandwillputonaChristmas|Therearearound30to35people|Theyare: Rhonda|Nickyand|Steve,Suzanne,Gingerand/^[A-個(gè)換行符的行。將找到第5行。/^[A-Z][a-z]*3[0-再跟0—5之間的一個(gè)數(shù)字。/^*[A-Z][a-z][a-/^[A-Za-z]*[^,][A-Za-vi、sedgrep%viPattywonfourthplaceinthe50yarddashsquareandfair.Occurenceslikethisarerare.Haha,whatyouwantisjust~~3grepgrep--------如果grep操作成功,則狀態(tài)是0,如果模式?jīng)]找到,狀態(tài)是1,如果文件沒找到,狀態(tài)是2。如果操作被取消,則狀態(tài)是130。查看狀態(tài)的方法:在csh中用echo$statusshkshecho$?。例如$echo$? Charles Sharon Lewis Suan Patricia TB AMMain Margot Ann grepNWgrepNWgrep'^n'grepTBSavagegrep'TBSavage'grep'^[we]'7)grep' Charles3 Lewis2grep%lsdrwxr-xr-64drwxr-xr-24-rwxr--r-14-rwxr--r- 4 321:51%ls–l|drwxr-xr- drwxr-xr- 5124321:4951241022:23%ls-l|grep-rwxr--r--rwxr--r-1144321:51321:51帶選項(xiàng)的grep舉例:grep–c‘west’datafileegrep+'[a-字母,后跟ove?egrepegrep'2\.?[0-9]'fgrepSangrep'San'grep'^J'700grep'700$'grep-v'834'grep'/12'grep-n'[0-9]\{6,\}$'sed

sed是流線型、非交互式編輯器。它允許你執(zhí)行與vi和ex編輯器里一樣的編sedsedsedsed用本改變(取代)當(dāng)前行里的文dh把模式空間內(nèi)容到一個(gè)固定緩HgG得到固定緩存的內(nèi)容并到模式緩存,添加到里Ipnqr!sgpwxy把一個(gè)字符轉(zhuǎn)換成另一個(gè)(不能和整則表達(dá)式元字符一起使用sed基本上,grep和vi使用的元字符都可以用在sed中。具體可參照第二章。下表列出了一些特別的sed元字符:&號(hào)包圍的自身所替代;即變成1>:psed'/north/p'sed–n'/north/p'2>:dsed'3d'sed'3,$d'sed'/north/d'3>:ssed's/west/north/g'sed's/[0-9][0-9]$/&.5/'sed-n's/Hemenway/es/gp'解釋:所有的Hemenway所在的位置都用 行被打印。-n與p命令選項(xiàng)相結(jié)合來 默認(rèn)輸出。g代表全局替換sed-n's/\(Mar\)got/\1ianne/p'datafile換串里它將被做\1。然后用Marianne替代Margot。sed's#3#88#g'4>sed-n'/west/,/east/p'westeastwesteast之后,則打印從west到下一個(gè)east或者到文件末尾的行,無論哪種情況sed'/west/,/east/s/$/**VACA**/'5>多次編輯-esed-e'1,3d'-e's/Hemenway/es/'6>從文件中:r命sed'/Suan/rnewfile'解釋:rnewfile中內(nèi)容,將內(nèi)容輸出到Suan7>:wsed-n'/north/wnewfile'newfilesed-n'/north/p'datafile>newfile8>:a$sed---->THENORTHSALESDISTRICTHASMOVED<-----'---->THECharlesDISTRICTHASMOVED<----3Sharon5Lewis2Suan4Patricia4TB5AMMain3---->THEDISTRICTHASMOVED<----Margot59---->THEDISTRICTHASMOVED<----Ann59>:i$sed---->THENORTHSALESDISTRICTHASMOVED<-----'---->THEDISTRICTHASMOVED<----Charles3Sharon5Lewis2Suan4Patricia4TB5---->THEDISTRICTHASMOVED<----AMMain3---->THEDISTRICTHASMOVED<----Margot59Ann5$sed'/eastern/{n;s/AM/Archie/;}'Charles3Sharon5Lewis2Suan4Patricia4TB5ArchieMain3用該行帶換模式空間,用Archie替換AM,打印并繼續(xù)。11>變換:ysed'1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/'12>退出:qsed'5q'13>保存和取得:hG$sed-e'/southeast/h'-e'$G'Charles3Sharon5Lewis2Suan4Patricia4TB5AMMain3Margot59Ann5Patricia4解釋:當(dāng)sed處理文件時(shí),每行都存在模式空間(patternspace)的臨時(shí)緩存中??臻g里,而且h命令它并把它存到另一個(gè)叫做保存緩存(holdingbuffer)中。第二個(gè)sed指令里,當(dāng)讀入最后一行($)時(shí),G命令告訴sed從包存緩存中取得該行并$sed-e'/WE/{h;d;}'-e'/CT/G'Charles3Lewis2Suan4Patricia4TB5AMMain3Margot59Ann5Sharon514>Gg15>sed16>保存和交換:hx$sed-e'/Patricia/h'-e'/Margot/x'Charles3Sharon5Lewis2Suan4Patricia4TB5AMMain3Patricia4Ann5sed命令表(script)是文件里的一個(gè)sed命令列表。用-f選項(xiàng)來一個(gè)命令表文件。編輯sed命令表有特殊要求:命令末尾不能有任何為歲的空白下有兩個(gè)編輯好令表文件(sedding1和sedding2)可以參考下面是使用sed命令表的例子。$sed-fsedding1datafileEMPLOYEEDATABASECharles3Sharon5isLewisDalsassTOPSalesfor2Lewisismovingtothesoutherndistrictnextmonth.Suan4Patricia4TB5AMMain3MARGOTHASRETIRED1〉把改成sed's//athan/'datebook2〉刪除頭3行sed'1,3d'datebook3〉打印5—10行sedn'5,10p'datebook4〉刪除包含Lane的行sed'/Lane/d'sed-n'/:1[12]\//p'sed'/^Fred/s/$/***/'7JOSEHASRETIREDJosesed's/^Jose[0-9]*[a-z]*[A-Z]**.*$/JOSEHASLEFT/'datebook8〉把Popeye的生日改成11/14/46sed'/Popeye/s/:[0-9]*[0-9]*\/[0-9]*[0-9]*\/[0-9]*[0-9]*/:11\/14\/46/'9〉刪除所有空白行sed'/^$/d'datebook#MyfirstsedscriptbyWangzhh.NELs/\([A-Z][a-z]*\)\([A-Z][a-z]*\):/\2THEawkawk是用來操作數(shù)據(jù)和產(chǎn)生報(bào)表的一種編程語言。數(shù)據(jù)可能來自標(biāo)準(zhǔn)輸入、一個(gè)或者多個(gè)文件或者是一個(gè)進(jìn)程的輸出。awk可以用在命令行里用于簡單花括號(hào)里。本文章所有的例子使用的文件說明都在chap05 awkawk(或在一個(gè)文件里)的程序指令,和輸employees文件中的內(nèi)容:$cat MarySallyBilly$awk$awk'{print$1}'employeesnawk'/Sally/{print$1,$2}'$df-k|awk 例子1:$20050430192925$date|awk'{print"Date:"$1"\nTime:"$3}'Date:20050430日Time:1934245.1$nawk'/Sally/{print"\t\tHaveaniceday,"$1,$2"\!"}'employeesHaveaniceday,SallyChang!解釋:如果包含模式Sally,則print函數(shù)打印兩個(gè)跳格,串Haveanice用OFMT變量。默認(rèn)設(shè)置是“%.6g”,也就是打印精度到小數(shù)點(diǎn)后6位。下$nawk'BEGIN{OFMT="%.2f";print1.,12E-1.23printf函數(shù)提供了強(qiáng)大的格式化輸出功能,如果對(duì)c比較熟悉,就不會(huì)感cs串duxoefg-#前面有個(gè)0x+0x=’A’y=15z=2.3$1=Bob$printf"Thecharacteris%c\n"$xThecharacterisA$printf"Theboyis%dyearsold\n"Theboyis15years打印用科學(xué)記的一個(gè)$printf"zis%e\n"zis$printf"zis%f\n"zis$printf"yis%o\n"yis$printf"Thenameoftheculpritis%s\n"$1ThenameoftheculpritisBobSmith$printf"yis%x\n"$yyisf$echoUNIX|awk'{printf"|%- 占15個(gè)空格,左對(duì)齊,封裝在豎杠里而且有換行的串。$awk'{printf"Thenameis%-15sIDis%8d\n",$1,$3}'$cat MarySallyBilly$cat/^Mary/{print"o{print$1,$2,$nawk-fawkfileemployeesTomes4424oMary!MaryAdams5346SallyChangBillyBlack1〉記錄:awk不把輸入數(shù)據(jù)看作一個(gè)無窮的字符串,而是把它看作一種格式或輸入和輸出的記錄分隔符默認(rèn)是回車符,保存在內(nèi)置awkORSRS中。ORSRS可以改變,但是方式有限。$nawk'{print$0}' MarySallyBilly$awk1Tom2Mary3Sally4Billy也就是空格或制表符(TAB)。AwkNF來記錄每條記錄的域數(shù)量。令中改變需要用-F選項(xiàng)。$catTomMaryAdams:5346:11/4/63:28765Billy$awk'{print$1,$2}'employees2Tomes:4424:5/12/66:543354MaryAdams:5346:11/4/63:28765Billy$awk-F:'{print$1,$2}'employees2Tomes4424MaryAdamsSallyChangBillyBlack$nawk-F'[:\t]''{print$1,$2,$3}'employees2Tomes4424MaryAdamsSallyChangBillyBlackawkpatternsawkifif語句是隱含的,周圍可以沒有花括號(hào)。$awk'$3<4000'7/22/549/23/44$awk'/Tom/{print"othere,"$1}'employeesothere,Tom支持的正則表達(dá)式與egrep3.13.2。$nawk'/^Mary/'Mary 11/4/63$nawk'/^[A-Z][a-z]*/' MarySallyBilly$awk'$1~/[Bb]ill/'Billy 9/23/44$awk'$1!~/ly$/' 5/12/66Mary11/4/63awk#Hereisasamplescript:*#MyfirstawkscriptbyJack#Scriptname:info;Date:February28,/Tom/{print"Tom'sbirthdayis"/Mary/{printNR,/^Sally/{print"HiSally,"$1"hasasalaryof$"$4"."}#Endofscript習(xí)題文件是chap05/donors,部分內(nèi)容如下:MikeHarrington:(510)548-1278:250:100:175ChristianDobbins:(408)538-SusanDalsass:(206)654-ArchieMcNichol:(206)548-$awkF:'{print$2}'donors2〉打印Dan的$awk-F:'/^Dan/{print$2}'$nawkF'[:\t]''/^Susan/{print$1,$3,$4}'donors4〉打印所有以D開頭的姓$awk'$2~/^D/{print$2}'donors5〉打印所有以一個(gè)CE開頭的名$awk'/^[CE]/{print$1}'donors$nawk'/^[A-Z][a-z][a-z][a-z]/{print$1donors7〉打印所有那些區(qū)號(hào)是916的名$awk-F:'$2~/916/{print$1}'$awkF:'/^Mike/{printf"$%d$%d$%d\n",$3,$4,$5}'donors$nawk-F'[:\t]''{printf"%s,%s\n",$2,$1}'donors 寫一個(gè)叫facts的awk命令表,它能:$cat#Myfirstawkscriptsby/Savage/{print/^Chet/{printf"BeneficenceofChet:$3~/250/{printf"who'sbeneficenceisnawk-F:-ffacts為真則值等于1,反之等于0。<>~$catTom Mary Sally Billy $awk'$3==4423' $nawk'$3>5000{print$1}'employees$nawk'$2!~/Adam/'一個(gè)if/else語句相比更簡介。conditional}nawk'{max=($1>$2)?$1:$2;printmax}'二個(gè)域的內(nèi)容賦給max,然后打印max+加-減x-*乘/除%^6.2!6.3$nawk'$3>4000&&$3<=6000' Mary$nawk'!($3>4000&&$3<=6000)'employeesSally BillyBlack 模式被匹配,而第二個(gè)模式?jīng)]有找到,則awk將顯示直到末尾的所有行。$catJoel34Sharon5Chris2May4Derek4Susan5TJ3Val59Sheri5$nawk'/^north/,/^west/'Joel34Sharon5TJ3Val59Sheri5tooth:pwHfudo.eC9sM:476:40:ContractAdmin.:/home/rickenbacker/tooth:/bin/cshlisam:9JY7OuS2f3lHY:4467:40:LisaM.Spencer:/home/fortune1/lisam:/bin/cshgoode:v7Ww.nWJCeSIQ:32555:60:GoodwillGuestUser:/usr/goodwill:/bin/cshbonzo:eTZbu6M2jM7VA:5101:911:SSTOOLLogaccount:/home/sun4/bonzo:/bin/cshinfo:mKZsrioPtW9hA:611:41:TerriStern:/home/chewie/info:/bin/cshcnc:IN1IVqVj1bVv2:10209:41:CharlesCarnell:/ bee:*:347:40:ContractTemp.:/home/chanel5/bee:/bin/cshfriedman:oyuIiKoFTV0TE:3561:50:JayFriedman:/home/ibanez/friedman:/bin/cshchambers:Rw7R1k77yUY4.:592:40:CarolChambers:/usr/callisto2/chambers:/bin/cshgregc:nkLulOg:7777:30:GregChamplinFEChicago#nawkscript(coveredlaterinthe Todemonstrateexample6.8usingthisscript,run %nawk-fex_6.8.nawkpasswdBEGIN{FS=NF!=7{printf("line%d,doesnothave7fields:$1!~/[A-Za-z0-9]/{printf("line%d,nonalphanumericuserid:$2=="*"{printf("line%d,nopassword:$awk-fex_6.8.nawkline7,nopassword:bee:*:347:40:ContractTemp.:/home/chanel5/bee:/bin/cshMikeHarrington:(510)548-ChristianDobbins:(408)538-SusanDalsass:(206)654-ArchieMcNichol:(206)548-JodySavage:(206)548-GuyQuigley:(916)343-DanSavage:(406)298-NancyMcNeil:(206)548-JohnGoldenrod:(916)348-ChetMain:(510)548-TomSavage:(408)926-ElizabethStachelin:(916)440-$awk-F:'$3>100{print$1}'lab4.data2>打印那些第一個(gè)月捐款少于$60的人的$awkF:'$3<60{print$1,$2}'lab4.data$awkF:'$5>=90&&$5<=150{print$0}'lab4.data4>打印那些三個(gè)月捐款在800以上的人$awkF:'$3+$4+$5>800{print$0}'lab4.data$nawkF'[:\t]''($5+$6+$7)/3>150{print$1,$3,$4}'lab4.data6>打印那些區(qū)號(hào)不是916的人名$nawkF'[:\t]''$3!~/916/{print$1}'lab4.data7>打印每條記錄,記錄號(hào)面$awk'{printNR,$0}'lab4.data8>打印每個(gè)人的名字和捐款總額$nawkF'[:\t]''sum=($5+$6+$7){print$1,sum}'lab4.data9>把Elizabeth的第二次捐款加上$10$nawk-F'[:\t]''juankuan=($1~/Elizabeth/)?$6+10:$6{print$1,juankuan}'$nawk'name=($1~/Nancy/)?"LouiseMcInnes":$1{printname}'

awk中變量不用,awk通過表達(dá)式的上下文推斷變量類型,并且如果需7.2nawk$nawk-F:'$1=="MaryAdams"{printNR,$1,$2,$NF}'employees22MaryAdams534628765模式主要用來設(shè)置OFS、RS、FS等內(nèi)置變量的值。 MarySally Mary 在所有行處理完畢之后再來處理END模式。$awk'/Mary/{count++}END{print"Marywasfound"count"times."}'Marywasfound1后,END模塊打印結(jié)果。awkUNIXs重定向操作符。如果重定向操作符用在awk命令里面則必須將重定向文件$awk'$4>70{print$1,$2>"passing_film"}'輸入重定向getline從正被處理的當(dāng)前文件。getline取得輸入的下一行,并更新NF、NR和FNR等內(nèi)置變量的值。如果getline找到記錄則返回1,達(dá)到EOF(文件結(jié)束)則返回0。如果有錯(cuò)誤則返回-1。$nawk'BEGIN{"date"|getlined;printd}'datafile20050506150541CST定義變量d,然后打印d。$nawk'BEGIN{while("ls"|getline)print}'$nawk'BEGIN{printf"Whatisyourgetline$1~name{print"Found"name"online",NREND{print"Seeya,"name"."}'

Whatisyourname?WangzhonghaiSeeya,Wangzhonghai.Whatisyourname?,并且等待用戶響應(yīng)。getline函數(shù)將從終端(/dev/tty)接受輸入,一直到輸入一個(gè)換行符為止,然后把輸入存到用戶自定義變量name中。如果遞一個(gè)域和name的值相匹配,則執(zhí)行print函數(shù)。在END模式中打印”Seeya,”然后跟name的值。$nawk'BEGIN{while(getline<"/etc/passwd">0)lc++;printlc}'16解釋:awk將從“/etc/passwd”各行,lc遞增,直到EOF,然后打印lc的值。如果在一個(gè)awk程序中打開一個(gè)管道,則必須在打開另一個(gè)之前先關(guān)閉它。在管道符號(hào)由變令封裝在雙引號(hào)里。一次只能打開一個(gè)管道。下面的例子是將names文件中的按照姓作為第一關(guān)鍵字,名作為第二關(guān)鍵字來進(jìn)行倒排序:$awk'{print$1,$2|"sort-r+1-2+0-1"}'namestonytramjohnsmithdanbarbaranguyenelizabethlonejohngoldenrodsusangol

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論