培训课件及-3unix shell实例精解学习笔记_第1页
培训课件及-3unix shell实例精解学习笔记_第2页
培训课件及-3unix shell实例精解学习笔记_第3页
培训课件及-3unix shell实例精解学习笔记_第4页
培训课件及-3unix shell实例精解学习笔记_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章关于UNIX 通讯。常见的s有Cs、Bs和Korns(Bs的超集s主要功解释交互运行时,在命令行提示下敲入制订用户环境,通常在s

^$.l,后跟两个字配*0/跟0与其中的一个相匹与包含loveLove[x-与集中一个范围内/[A-与后面跟oveAZ与不在集里的字符/[^A-\love词标志与以后用的字Able9个标志lovel,以后作\l;在这个例lover字符xm至少mmno表% Ihadalovelytimeonourlittle us,ohlove|ChristianScottliveshereandwillputonaChristmas|Therearearound30to35people|Theyare: Rhonda|Nickyand|Steve,Suzanne,Gingerand/^[A-个换行符的行。将找到第5行。/^[A-Z][a-z]*3[0-再跟0—5之间的一个数字。/^*[A-Z][a-z][a-/^[A-Za-z]*[^,][A-Za-vi、sedgrep%viPattywonfourthplaceinthe50yarddashsquareandfair.Occurenceslikethisarerare.Haha,whatyouwantisjust~~3grepgrep--------如果grep操作成功,则状态是0,如果模式没找到,状态是1,如果文件没找到,状态是2。如果操作被取消,则状态是130。查看状态的方法:在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带选项的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是流线型、非交互式编辑器。它允许你执行与vi和ex编辑器里一样的编sedsedsedsed用本改变(取代)当前行里的文dh把模式空间内容到一个固定缓HgG得到固定缓存的内容并到模式缓存,添加到里Ipnqr!sgpwxy把一个字符转换成另一个(不能和整则表达式元字符一起使用sed基本上,grep和vi使用的元字符都可以用在sed中。具体可参照第二章。下表列出了一些特别的sed元字符:&号包围的自身所替代;即变成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命令选项相结合来 默认输出。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到下一个east或者到文件末尾的行,无论哪种情况sed'/west/,/east/s/$/**VACA**/'5>多次编辑-esed-e'1,3d'-e's/Hemenway/es/'6>从文件中:r命sed'/Suan/rnewfile'解释:rnewfile中内容,将内容输出到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,打印并继续。11>变换:ysed'1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/'12>退出:qsed'5q'13>保存和取得:hG$sed-e'/southeast/h'-e'$G'Charles3Sharon5Lewis2Suan4Patricia4TB5AMMain3Margot59Ann5Patricia4解释:当sed处理文件时,每行都存在模式空间(patternspace)的临时缓存中。空间里,而且h命令它并把它存到另一个叫做保存缓存(holdingbuffer)中。第二个sed指令里,当读入最后一行($)时,G命令告诉sed从包存缓存中取得该行并$sed-e'/WE/{h;d;}'-e'/CT/G'Charles3Lewis2Suan4Patricia4TB5AMMain3Margot59Ann5Sharon514>Gg15>sed16>保存和交换:hx$sed-e'/Patricia/h'-e'/Margot/x'Charles3Sharon5Lewis2Suan4Patricia4TB5AMMain3Patricia4Ann5sed命令表(script)是文件里的一个sed命令列表。用-f选项来一个命令表文件。编辑sed命令表有特殊要求:命令末尾不能有任何为岁的空白下有两个编辑好令表文件(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是用来操作数据和产生报表的一种编程语言。数据可能来自标准输入、一个或者多个文件或者是一个进程的输出。awk可以用在命令行里用于简单花括号里。本文章所有的例子使用的文件说明都在chap05 awkawk(或在一个文件里)的程序指令,和输employees文件中的内容:$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函数打印两个跳格,串Haveanice用OFMT变量。默认设置是“%.6g”,也就是打印精度到小数点后6位。下$nawk'BEGIN{OFMT="%.2f";print1.,12E-1.23printf函数提供了强大的格式化输出功能,如果对c比较熟悉,就不会感cs串duxoefg-#前面有个0x+0x=’A’y=15z=2.3$1=Bob$printf"Thecharacteris%c\n"$xThecharacterisA$printf"Theboyis%dyearsold\n"Theboyis15years打印用科学记的一个$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个空格,左对齐,封装在竖杠里而且有换行的串。$awk'{printf"Thenameis%-15sIDis%8d\n",$1,$3}'$cat MarySallyBilly$cat/^Mary/{print"o{print$1,$2,$nawk-fawkfileemployeesTomes4424oMary!MaryAdams5346SallyChangBillyBlack1〉记录:awk不把输入数据看作一个无穷的字符串,而是把它看作一种格式或输入和输出的记录分隔符默认是回车符,保存在内置awkORSRS中。ORSRS可以改变,但是方式有限。$nawk'{print$0}' MarySallyBilly$awk1Tom2Mary3Sally4Billy也就是空格或制表符(TAB)。AwkNF来记录每条记录的域数量。令中改变需要用-F选项。$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语句是隐含的,周围可以没有花括号。$awk'$3<4000'7/22/549/23/44$awk'/Tom/{print"othere,"$1}'employeesothere,Tom支持的正则表达式与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习题文件是chap05/donors,部分内容如下: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〉打印所有以一个CE开头的名$awk'/^[CE]/{print$1}'donors$nawk'/^[A-Z][a-z][a-z][a-z]/{print$1donors7〉打印所有那些区号是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 写一个叫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/'一个if/else语句相比更简介。conditional}nawk'{max=($1>$2)?$1:$2;printmax}'二个域的内容赋给max,然后打印max+加-减x-*乘/除%^6.2!6.3$nawk'$3>4000&&$3<=6000' Mary$nawk'!($3>4000&&$3<=6000)'employeesSally BillyBlack 模式被匹配,而第二个模式没有找到,则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>打印那些第一个月捐款少于$60的人的$awkF:'$3<60{print$1,$2}'lab4.data$awkF:'$5>=90&&$5<=150{print$0}'lab4.data4>打印那些三个月捐款在800以上的人$awkF:'$3+$4+$5>800{print$0}'lab4.data$nawkF'[:\t]''($5+$6+$7)/3>150{print$1,$3,$4}'lab4.data6>打印那些区号不是916的人名$nawkF'[:\t]''$3!~/916/{print$1}'lab4.data7>打印每条记录,记录号面$awk'{printNR,$0}'lab4.data8>打印每个人的名字和捐款总额$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通过表达式的上下文推断变量类型,并且如果需7.2nawk$nawk-F:'$1=="MaryAdams"{printNR,$1,$2,$NF}'employees22MaryAdams534628765模式主要用来设置OFS、RS、FS等内置变量的值。 MarySally Mary 在所有行处理完毕之后再来处理END模式。$awk'/Mary/{count++}END{print"Marywasfound"count"times."}'Marywasfound1后,END模块打印结果。awkUNIXs重定向操作符。如果重定向操作符用在awk命令里面则必须将重定向文件$awk'$4>70{print$1,$2>"passing_film"}'输入重定向getline从正被处理的当前文件。getline取得输入的下一行,并更新NF、NR和FNR等内置变量的值。如果getline找到记录则返回1,达到EOF(文件结束)则返回0。如果有错误则返回-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?,并且等待用户响应。getline函数将从终端(/dev/tty)接受输入,一直到输入一个换行符为止,然后把输入存到用户自定义变量name中。如果递一个域和name的值相匹配,则执行print函数。在END模式中打印”Seeya,”然后跟name的值。$nawk'BEGIN{while(getline<"/etc/passwd">0)lc++;printlc}'16解释:awk将从“/etc/passwd”各行,lc递增,直到EOF,然后打印lc的值。如果在一个awk程序中打开一个管道,则必须在打开另一个之前先关闭它。在管道符号由变令封装在双引号里。一次只能打开一个管道。下面的例子是将names文件中的按照姓作为第一关键字,名作为第二关键字来进行倒排序:$awk'{print$1,$2|"sort-r+1-2+0-1"}'namestonytramjohnsmithdanbarbaranguyenelizabethlonejohngoldenrodsusangol

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论