《UnixShell实例精解》学习笔记Byturner《UnixShell实例精解》学习笔记ByTurner1《UnixShell实例精解》学习笔记Byturner第一章关于UNIXShell的介绍1.定义shell是一种特殊的程序,被用作用户与内核(kernel)的UNIX操作系统核心通讯。常见的shell有Cshell、Bshell和Kornshell(Bshell的超集)。2.shell主要功能解释交互运行时,在命令行提示下敲入的命令制订用户环境,通常在shell初始化文件中作这种工作。例如:设置终端键及窗口特征;设置搜索路径、权限、提示等shell可以用作解释编程语言。Shell程序也叫命令表,由再文件中列出的命令组成。3.主要shell命令:whomvrmwclscatdateatlprrshmoreawkpwdbcvifingerwpgfindcccpddgrepkshshpssedcallp2《UnixShell实例精解》学习笔记Byturner第2章UNIX工具箱1.正则表达式一个正则表达式就是用来在一次搜索中匹配相同字符的一个字符模式。在大多数程序中,把一个正则表达式封装在正斜杠(/)里。2.正则表达式元字符元字符功能实例解释^行开头定位/^love/与所有love开头的行匹配$行末尾定位/love$/与所有love结尾的行匹配.匹配单个字符/l..e/与包含一个l,后跟两个字符,然后跟一个e的行相匹配*跟前驱的0个或多个字符相匹配/*love/跟0个或多个空格后面的love模式的行相匹配[]与其中的一个相匹配/[Ll]ove/与包含love或者Love的行匹配[x-z]与集中一个范围内的一个字符相匹配/[A-Z]ove/与后面跟ove的从A到Z的字相匹配[^]与不在集里的字符匹配/[^A-Z]ove/不包括A到Z,后面跟ove的字相匹配\给一个元字符转移/love\./匹配行包括love,跟一个句点许多用RE元字符的UNIX程序支持的附加元字符(vi和grep支持)\词开头定位/\love/匹配行包含用love开头的词\词结尾定位/love\/匹配行包含love结尾的词\(..\)标志与以后用的字符相匹配/(love\)able\ler/Able可达9个标志,模式昀左边用第一个标志开始。例如,模式love保存作标志l,以后引用作\l;在这个例子中,搜索模式包括后面跟lover的lovablex\{m\}x\{m,\}x\{m,n\}字符x重复m次至少m次m到n次O\{5,10\}如果行包含5—10个连续的o则匹配表(2.1)3.举例查找文件中的含有love的词:%vipicnicIhadalovelytimeonourlittlepicnic.Loverswereallaroundus,ohlove:/love/4.组合正则表达式元字符文件内容:(数字是行号,竖线标明行的左右边界,不属于文件内容。这个文3《UnixShell实例精解》学习笔记Byturner件我写在shell/exam/exam_2.9中)1|ChristianScottliveshereandwillputonaChristmasparty.|2|Therearearound30to35peopleinvited.|3|Theyare:|4|Tom|5|Dan|6|RhondaSavage|7|NickyandKimerly.|8|Steve,Suzanne,GingerandLarry.|组合举例:/^[A-Z]..$/搜索行以A至Z的一个字母开头,然后跟两个任意字母,然后跟一个换行符的行。将找到第5行。/^[A-Z][a-z]*3[0-5]/搜索以一个大写字母开头,后跟0个或多个小写字母,再跟数字3,再跟0—5之间的一个数字。/^*[A-Z][a-z][a-z]$/搜索以0个或多个空格开头,跟一个大写字母,两个小写字母和一个换车符。将找到第4行的TOM(整行匹配)和第5行。注意,*前面有一个空格。/^[A-Za-z]*[^,][A-Za-z]*$/将查找以0个或多个大写或小写字母开头,不跟逗号,然后跟0个或多个大写或小写字母,然后跟一个换车符。将找到第5行。书中解释有误。5.更多的正则表达式元字符这里讨论的元字符不一定可以移植到所有的正则表达式中,但一般可以用在vi、sed和grep中。%vitextfilePattywonfourthplaceinthe50yarddashsquareandfair.Occurenceslikethisarerare.Haha,whatyouwantisjustfourth.~~:/\fourth\/将查找词fourth4《UnixShell实例精解》学习笔记Byturner第3章grep家族1.grep的含义是“全局搜索正则表达式(RE)并打印该行”2.grep支持的正则表达式与在文件中搜索基本一样。可以参考表2.1。3.grep的选项选项功能-b在各行之前放置它发现的块号。有时在根据上下文定位磁盘字块时有用-c显示匹配行数而不是内容-h不显示文件名-I在座比较时忽略字母大小写-n文件中每行之前给出它的相关行号-s无声操作。即除了错误消息外不做任何显示。用于检查退出状态-v把搜索翻转为只显示不匹配的行-w把表达式当作一个次来搜索,相当于用\和\括起来表3.14.grep命令的退出状态如果grep操作成功,则状态是0,如果模式没找到,状态是1,如果文件没找到,状态是2。如果操作被取消,则状态是130。查看状态的方法:在csh中用echo$status。在sh和ksh中用echo$?。例如$echo$?05.带正则表达式的grep举例:用于这些例子的文件叫datafile,位于chap03目录。内容如下:northwestNWCharlesMain3.0.98334westernWESharonGray5.3.97523southwestSWLewisDalsass2.7.8218southernSOSuanChin5.1.95415southeastSEPatriciaHemenway4.0.7417easternEATBSavage4.4.84520northeastNEAMMainJr.5.1.94313northNOMargotWeber4.5.8959centralCTAnnStephens5.7.945131)grepNWdatafile解释:打印datafile中包含NW的行2)grepNWd*解释:打印所有以d开头的文件中含有NW的文件。3)grep'^n'datafile解释:打印文件datafile中所有以字母n开头的行4)grepTBSavagedatafile解释:在Savage和datafile文件中查找有TB的行5)grep'TBSavage'datafile解释:在datafile文件中查找含有TBSavage的行并打印。这个例子在5《UnixShell实例精解》学习笔记Byturner书中有误。6)grep'^[we]'datafile打印datafile中以w或者e开头的行7)grep'ss*'datafilenorthwestNWCharlesMain3.0.98334southwestSWLewisDalsass2.7.8218解释:打印所有包含一个s并跟0个或者多个s,然后跟一个空格的行6.用管道的grepgrep可以从管道得到输入。%ls–ldrwxr-xr-x6oracledba5124月321:49chap10drwxr-xr-x2oracledba5124月1022:23exam-rwxr--r--1oracledba18424月321:51readme.txt-rwxr--r--1oracledba18014月321:51unix_readme.txt%ls–l|grep'^d'drwxr-xr-x6oracledba5124月321:49chap10drwxr-xr-x2oracledba5124月1022:23exam%ls-l|grep'^[^d]'-rwxr--r--1oracledba18424月321:51readme.txt-rwxr--r--1oracledba18014月321:51unix_readme.txt7.带选项的grep举例:grep–c‘west’datafile3解释计算datafile中含有west的总数。8.egrep(扩展的grep)egrep可以使用额外的正则表达式,如下表。元字符功能例子解释+匹配一个或多个前驱字符'[a-z]+ove'匹配一个或多个小写字母,后跟ove?匹配0个或者1个前驱字符'lo?ve'将找到love或lovea|b匹配a或者b'love|hate'与love或hate匹配()组字符'lov(ely|able)与lovely或lovable匹配表3.29.egrep举例:egrep'2\.?[0-9]'datafile解释:打印所有这样的行:它包含一个2,后跟0个或者一个句号,然后跟一个数字。10.fgrepfgrep把所有的元字符都当作字符本身,只代表自己。11.UNIX工具试验参考答案(内容参考datebook)打印包含San的行grep'San'datebook6《UnixShell实例精解》学习笔记Byturner打印所有以J开头的人名所在的行grep'^J'datebook打印以700结尾的行grep'700$'datebook打印所有不包含834的行grep-v'834'datebook打印出生在12月(December)的行grep'/12'datebook打印工资是6位数的行,并给出行号grep-n'[0-9]\{6,\}$'datebook7《UnixShell实例精解》学习笔记Byturner第4章流编辑器(sed)1.sed命令简介sed是流线型、非交互式编辑器。它允许你执行与vi和ex编辑器里一样的编辑任务。Sed程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,给文件命名,然后在屏幕上查看命令输出结果。2.sed如何工作sed编辑器按一次处理一行的方式来处理文件,并把输出送到屏幕上。3.sed可以用寻址的方式来决定想要编辑哪一行。4.sed命令和选项命令功能a\在当前行上添加一个文本行或者多个文本行c\用新闻本改变(取代)当前行里的文本d删除行i\在当前行之前插入文本h把模式空间内容复制到一个固定缓存H把模式空间内容添加到一个固定缓存g得到固定缓存里所有的禀复制到模式缓存,重写其内容G得到固定缓存的内容并复制到模式缓存,添加到里面I列出不打印的字符p打印行n读下一输入行,并开始用下一个命令处理换行符,而不是用第一个命令q结束或退出sedr从一个文件读如行!把命令应用到除了选出的行以外的其他所有行s把一个字串替换成另一个替换标志g在一行上进行全局替换p打印行w把行写到一个文件中x用模式空间的内容交换固定缓存的内容y把一个字符转换成另一个(不能和整则表达式元字符一起使用)5.sed元字符基本上,grep和vi使用的元字符都可以用在sed中。具体可参照第二章。下表列出了一些特别的sed元字符:元字符功能例子解释&保存搜索串以便可以记在替换串里s/love/**&**/&号代表搜索串。串love将被星号包围的自身所替代;即love变成**love**6.sed的实例(使用datafile)8《UnixShell实例精解》学习笔记Byturner1打印:p命令sed'/north/p'datafile默认输出所有行,找到north的行重复打印sed–n'/north/p'datafile禁止默认输出,只打印找到north的行2删除:d命令sed'3d'datafile删除第三行,其余行输出到屏幕sed'3,$d'datafile从第3行到昀后一行都删除,将剩余部分输出到屏幕sed'/north/d'datafile将含有