《UnixShell实例精解》学习笔记.docx
- 文档编号:3600553
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:38
- 大小:38.76KB
《UnixShell实例精解》学习笔记.docx
《《UnixShell实例精解》学习笔记.docx》由会员分享,可在线阅读,更多相关《《UnixShell实例精解》学习笔记.docx(38页珍藏版)》请在冰豆网上搜索。
《UnixShell实例精解》学习笔记
《UnixShell实例精解》学习笔记
ByTurner
第一章关于UNIXShell的介绍
1.定义
shell是一种特殊的程序,被用作用户与内核(kernel)的UNIX操作系统核心
通讯。
常见的shell有Cshell、Bshell和Kornshell(Bshell的超集)。
2.shell主要功能
●解释交互运行时,在命令行提示下敲入的命令
●制订用户环境,通常在shell初始化文件中作这种工作。
例如:
设置终端键及窗口特征;设置搜索路径、权限、提示等
●shell可以用作解释编程语言。
Shell程序也叫命令表,由再文件中列出的命令组成。
3.主要shell命令:
whomvrmwclscatdateat
lprrshmoreawkpwdbcvifingerw
pgfindcccpddgrepkshsh
pssedcallp
第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\)able\ler/ Able可达9个标志,模式最左边用第一个标志开始。 例如,模式love保存作标志l,以后引用作\l;在这个例子中,搜索模式包括后面跟lover的lovable x\{m\} x\{m,\} x\{m,n\} 字符x重复m次 至少m次 m到n次 O\{5,10\} 如果行包含5—10个连续的o则匹配 表(2.1) 3.举例 查找文件中的含有love的词: %vipicnic Ihadalovelytimeonourlittlepicnic.Loverswereallaroundus,ohlove : /love/ 4.组合正则表达式元字符 文件内容: (数字是行号,竖线标明行的左右边界,不属于文件内容。 这个文件我写在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中。 %vitextfile ----------------------------------------------------------------------- Pattywonfourthplaceinthe50yarddashsquareandfair. Occurenceslikethisarerare. Haha,whatyouwantisjustfourth. ~ ~ : /\ 将查找词fourth 第3章grep家族 1.grep的含义是“全局搜索正则表达式(RE)并打印该行” 2.grep支持的正则表达式 与在文件中搜索基本一样。 可以参考表2.1。 3.grep的选项 选项 功能 -b 在各行之前放置它发现的块号。 有时在根据上下文定位磁盘字块时有用 -c 显示匹配行数而不是内容 -h 不显示文件名 -I 在座比较时忽略字母大小写 -n 文件中每行之前给出它的相关行号 -s 无声操作。 即除了错误消息外不做任何显示。 用于检查退出状态 -v 把搜索翻转为只显示不匹配的行 -w 把表达式当作一个次来搜索,相当于用\<和\>括起来 表3.1 4.grep命令的退出状态 如果grep操作成功,则状态是0,如果模式没找到,状态是1,如果文件没 找到,状态是2。 如果操作被取消,则状态是130。 查看状态的方法: 在csh 中用echo$status。 在sh和ksh中用echo$? 。 例如 $echo$? 0 5.带正则表达式的grep举例: 用于这些例子的文件叫datafile,位于chap03目录。 内容如下: northwestNWCharlesMain3.0.98334 westernWESharonGray5.3.97523 southwestSWLewisDalsass2.7.8218 southernSOSuanChin5.1.95415 southeastSEPatriciaHemenway4.0.7417 easternEATBSavage4.4.84520 northeastNEAMMainJr.5.1.94313 northNOMargotWeber4.5.8959 centralCTAnnStephens5.7.94513 1)grepNWdatafile 解释: 打印datafile中包含NW的行 2)grepNWd* 解释: 打印所有以d开头的文件中含有NW的文件。 3)grep'^n'datafile 解释: 打印文件datafile中所有以字母n开头的行 4)grepTBSavagedatafile 解释: 在Savage和datafile文件中查找有TB的行 5)grep'TBSavage'datafile 解释: 在datafile文件中查找含有TBSavage的行并打印。 这个例子在书中有误。 6)grep'^[we]'datafile 打印datafile中以w或者e开头的行 7)grep'ss*'datafile northwestNWCharlesMain3.0.98334 southwestSWLewisDalsass2.7.8218 解释: 打印所有包含一个s并跟0个或者多个s,然后跟一个空格的行 6.用管道的grep grep可以从管道得到输入。 %ls–l drwxr-xr-x6oracledba5124月321: 49chap10 drwxr-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: 49chap10 drwxr-xr-x2oracledba5124月1022: 23exam %ls-l|grep'^[^d]' -rwxr--r--1oracledba18424月321: 51readme.txt -rwxr--r--1oracledba18014月321: 51unix_readme.txt 7.带选项的grep举例: grep–c‘west’datafile 3 解释计算datafile中含有west的总数。 8.egrep(扩展的grep) egrep可以使用额外的正则表达式,如下表。 元字符 功能 例子 解释 + 匹配一个或多个前驱字符 '[a-z]+ove' 匹配一个或多个小写字母,后跟ove ? 匹配0个或者1个前驱字符 'lo? ve' 将找到love或love a|b 匹配a或者b 'love|hate' 与love或hate匹配 () 组字符 'lov(ely|able) 与lovely或lovable匹配 表3.2 9.egrep举例: egrep'2\.? [0-9]'datafile 解释: 打印所有这样的行: 它包含一个2,后跟0个或者一个句号,然后跟一个数字。 10.fgrep fgrep把所有的元字符都当作字符本身,只代表自己。 11.UNIX工具试验参考答案(内容参考datebook) ●打印包含San的行 grep'San'datebook ●打印所有以J开头的人名所在的行 grep'^J'datebook ●打印以700结尾的行 grep'700$'datebook ●打印所有不包含834的行 grep-v'834'datebook ●打印出生在12月(December)的行 grep'/12'datebook ●打印工资是6位数的行,并给出行号 grep-n'[0-9]\{6,\}$'datebook 第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 结束或退出sed r 从一个文件读如行 ! 把命令应用到除了选出的行以外的其他所有行 s 把一个字串替换成另一个 替换标志 g 在一行上进行全局替换 p 打印行 w 把行写到一个文件中 x 用模式空间的内容交换固定缓存的内容 y 把一个字符转换成另一个(不能和整则表达式元字符一起使用) 5.sed元字符 基本上,grep和vi使用的元字符都可以用在sed中。 具体可参照第二章。 下表列出了一些特别的sed元字符: 元字符 功能 例子 解释 & 保存搜索串以便可以记在替换串里 s/love/**&**/ &号代表搜索串。 串love将被星号包围的自身所替代;即love变成**love** 6.sed的实例(使用datafile) 1>打印: 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 将含有north的行删除,其余输出到屏幕 3>替换: s命令 sed's/west/north/g'datafile 解释: 找到datafile中的所有west并替换成north,将替换后的内容输出到屏幕。 sed's/[0-9][0-9]$/&.5/'datafile 解释: 在替代串里的&字符代表在搜索串中真正找到的。 每个以两个数字结尾的行都被它自己取代,且要在后面加上.5 sed-n's/Hemenway/Jones/gp'datafile 解释: 所有的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。 -n与p命令选项相结合来禁止默认输出。 g代表全局替换 sed-n's/\(Mar\)got/\1ianne/p'datafile 解释: 模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。 在替换串里它将被引用做\1。 然后用Marianne替代Margot。 sed's#3#88#g'datafile s命令后面的字符是搜索串和替换串之间的分界符。 默认的分界符是一个正斜杠,但也可以改变(只有使用s命令时)。 无论s命令后面跟什么字符,它都是新的串分界符。 当搜索包含一个正斜杠的模式,如路径或生日时,这种技巧可能有用 4>被选中的行的范围: 逗号 sed-n'/west/,/east/p'datafile 打印在west和east之间的模式范围内所有行。 如果west出现在east之后,则打印从west到下一个east或者到文件末尾的行,无论哪种情况先出现都可以。 sed'/west/,/east/s/$/**VACA**/'datafile 解释: 对于在模式west到east范围内的行,行末尾将用**VACA**来取代。 5>多次编辑-e选项 sed-e'1,3d'-e's/Hemenway/Jones/'datafile -e选项允许多次编辑。 不同的编辑顺序可能导致不同的结果。 例如,如果两个命令都执行了替换,第一次替换可能影响第二次替换。 6>从文件中读取: r命令 sed'/Suan/rnewfile'datafile 解释: r命令从newfile中读取内容,将内容输出到Suan的后面。 如果datafile中Suan出现的次数不只一次,则分别放到Suan的后面。 7>写入文件: w命令 sed-n'/north/wnewfile'datafile 解释: w命令把指定的行写入到一个文件。 本例中所有的包含north的行写入到newfile中。 等同于sed-n'/north/p'datafile>newfile 8>添加: a命令 $sed'/north/a\ >---->THENORTHSALESDISTRICTHASMOVED<-----'datafile northwestNWCharlesMain3.0.98334 ---->THENORTHSALESDISTRICTHASMOVED<----- westernWESharonGray5.3.97523 southwestSWLewisDalsass2.7.8218 southernSOSuanChin5.1.95415 southeastSEPatriciaHemenway4.0.7417 easternEATBSavage4.4.84520 northeastNEAMMainJr.5.1.94313 ---->THENORTHSALESDISTRICTHASMOVED<----- northNOMargotWeber4.5.8959 ---->THENORTHSALESDISTRICTHASMOVED<----- centralCTAnnStephens5.7.94513 解释: 红颜色的内容是要输入的内容。 a\命令后面跟要添加的内容。 奇怪的是a\后面必须另起一行,在输入要添加的内容,否则会提示命令错乱,真是搞不懂。 9>插入: i命令 $sed'/north/i\ >---->THENORTHSALESDISTRICTHASMOVED<-----'datafile ---->THENORTHSALESDISTRICTHASMOVED<----- northwestNWCharlesMain3.0.98334 westernWESharonGray5.3.97523 southwestSWLewisDalsass2.7.8218 southernSOSuanChin5.1.95415 southeastSEPatriciaHemenway4.0.7417 easternEATBSavage4.4.84520 ---->THENORTHSALESDISTRICTHASMOVED<----- northeastNEAMMainJr.5.1.94313 ---->THENORTHSALESDISTRICTHASMOVED<----- northNOMargotWeber4.5.8959 centralCTAnnStephens5.7.94513 解释: 在符合模式的行前面插入内容。 其余和a\命令相同。 10>下一个: n命令 $sed'/eastern/{n;s/AM/Archie/;}'datafile northwestNWCharlesMain3.0.98334 westernWESharonGray5.3.97523 southwestSWLewisDalsass2.7.8218 southernSOSuanChin5.1.95415 southeastSEPatriciaHemenway4.0.7417 easternEATBSavage4.4.84520 northeastNEArchieMainJr.5.1.94313 …… 解释: 如果在某一行里模式eastern被匹配,n命令使sed区的下一行,用该行带换模式空间,用Archie替换AM,打印并继续。 11>变换: y命令 sed'1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/'datafile 解释: 将对应字母进行转换。 12>退出: q命令 sed'5q'datafile 解释: 在打印了5行之后,用q命令退出sed程序。 13>保存和取得: h和G命令 $sed-e'/southeast/h'-e'$G'datafile northwestNWCharlesMain3.0.98334 westernWESharonGray5.3.97523 southwestSWLewisDalsass2.7.8218 southernSOSuanChin5.1.95415 southeastSEPatriciaHemenway4.0.7417 easternEATBSavage4.4.84520 northeastNEAMMainJr.5.1.94313 northNOMargotWeber4.5.8959 centralCTAnnStephens5.7.94513 southeastSEPatriciaHemenway4.0.7417 解释: 当sed处理文件时,每行都存在模式空间(patternspace)的临时缓存中。 除非行被禁止打印或删除,否则行将在处理完后被打印到屏幕,然后请模式空间并把下一输入行保存在那里等待处理。 在这个例子中,在找到模式之后,把它放在模式空间里,而且h命令复制它并把它存到另一个叫做保存缓存(holdingbuffer)中。 第二个sed指令里,当读入最后一行($)时,G命令告诉sed从包存缓存中取得该行并放回模式空间缓存,添加到当前存在那里的行中。 本例子就是最后一行。 $sed-e'/WE/{h;d;}'-e'/CT/G'datafile northwestNWCharlesMain3.0.98334 southwestSWLewisDalsass2.7.8218 so
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UnixShell实例精解 UnixShell 实例 学习 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)