第4章.SHell编程(续).doc_第1页
第4章.SHell编程(续).doc_第2页
第4章.SHell编程(续).doc_第3页
第4章.SHell编程(续).doc_第4页
第4章.SHell编程(续).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

红旗Linux软件技术学院-RCE课程之系统管理第4章 Shell编程(续)教学内容:n Shell置换和引用n 文本过滤n awk教学目标:n 熟悉shelll置换和引用n 掌握awk和置换命令 教学重点:n awk n sed教学难点:n awk 一 shell置换和引用1 什么是置换和引用在shell中具有很多特殊意义的字符(*、?、等),shell将包含元字符的字符串根据其意义转换成新字符串的过程称为置换;关闭shell对特殊字符含义的解析处理被称为引用。2 Shell置换的类型 (1) 文件名置换l 元字符-* 匹配所有字符-? 匹配所有单个字符- 匹配括弧内的字符-! 匹配除括弧内的其他字符l 实例-#ls abc*-#ls ?abc-#ls abc*-#ls !a*(2) 变量置换l $ varname和$varname 置换变量的值,引用指定变量名的值l $ varname:+value 判断varname变量是否设置,如果设置了,则显示value,否则显示空l $varname:?value 如果变量varname变量未设置/为空,则显示错误信息valuel $varname:-value 如果变量varname变量未设置/为空,则显示valuel $varname:=value 如果变量varname变量未设置/为穿,则显示value,并将value值赋给varname变量(3) 命令置换l 使用命令,置换命令的结果。如cat ls /etc/grub.confl 使用$(命令)方式置换命令的结果。如cat $(ls /etc/grub.conf)(4) 运算式置换l 使用$(算术表达式)置换表达式的结果。如a=$( (1 + 1 )l 使用declare/let定义整型变量和给变量赋值。如let a=5+53 Shell引用l 使用“”取消其后面的特殊字符的含义,特殊字符有* ? “ ” $ ; & ( ) | ! #;如“abc*”.l 使用引用所有被括起来的字符,如echo $a*l 使用“”引用所有除$和以外的字符二 文本过滤 1 什么是文本过滤文本过滤指的是提取指定文件中的部分内容或替换指定文本文件中的字符串 2 文本过滤的命令(1) head功能:输出文件头部n行格式:head -n 文件名实例:#head -3 /etc/passwd(2) tail功能:输出文件尾部n行或监控文件格式:tail +n/-n/-f 文件实例:#tail 3 /etc/passwd #tail +3 /etc/passwd #tail f /etc/passwd(3) uniq功能: 检查及删除文本文件中重复出现的行列格式: uniq 选项 输入文件输出文件选项:-c 在每列旁边显示该行重复出现的次数。-d 仅显示重复出现的行列。-f 忽略比较指定的栏位。-s 忽略比较指定的字符。-u 仅显示出现一次的行。-w指定要比较的字符。实例:#uniq -u /root/aa#uniq -dc /root/aa(4) sort功能:对文件进行排序/合并格式:sort 选项 文件名选项:-d:按字典顺序(只对空格/字母/数字)-f:忽略大小写-t:指定分隔符-r反向-n按数字大小显示-c只检查是否有序,不实际排序-u消除重复行实例:#sort -r /etc/passwd#sort +1-2 /etc/passwd(5) grep功能:在文本文件中查找匹配的字符串格式:#grep 参数 “字符串” 文件参数: -? 同时显示匹配行上下的?行-b 在匹配行前面打印该行所在的块号-c 只打印匹配的行数,不显示匹配的内容-f File 从文件中提取模板,空文件中包含0个模板,所以什么都不匹配-h 当搜索多个文件时,不显示匹配文件名前缀-I 忽略大小写差别-q 取消显示,只返回退出状态。0则表示找到了匹配的行-l 打印匹配模板的文件清单-L 打印不匹配模板的文件清单-n 在匹配的行前面打印行号-s 不显示关于不存在或者无法读取文件的错误信息-v 反检索,只显示不匹配的行-w 如果被引用,就把表达式做为一个单词搜索正则表达式元字符: 锚定行的开始 如:grep匹配所有以grep开头的行$ 锚定行的结束 如:grep$匹配所有以grep结尾的行. 匹配一个非换行符的字符 如:gr.p匹配gr后接一个任意字符,然后是p* 匹配零个或多个先前字符 如:*grep匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符 匹配一个指定范围内的字符,如Ggrep匹配Grep和grep 匹配一个不在指定范围内的字符,如:A-FH-Zrep匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行(.) 标记匹配字符,如(love),love被标记为1 锚定单词的开始,如: 锚定单词的结束,如:grep匹配包含以grep结尾的单词的行 xm 重复字符x,m次,如:05匹配包含5个o的行xm, 重复字符x,至少m次,如:o5,匹配至少有5个o的行xm,n 重复字符x,至少m次,不多于n次,如:o5,10匹配5-10个o的行实例:# ls -l | grep a 通过管道过滤ls -l输出的内容,只显示以a开头的行。# grep test d* 显示所有以d开头的文件中包含test的行。# grep test aa bb cc 显示在aa,bb,cc文件中匹配test的行。# grep a-z5 aa 显示所有包含每个字符串有5个连续小写字符的字符串的行。# grep w(es)t.*1 aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用号进行转义,直接写成w(es)t.*1就可以了。(6) sed功能:Sed(a stream editor)是流线型、非交互式编辑器。它允许你执行与vi编辑器里一样的编辑任务。Sed 程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,给文件命名,然后在屏幕上查看命令输出结果。格式:sed 选项 sed子命令 输入文件 输出文件子命令:p 打印匹配行= 显示文件行号a 在定位行号后附加新文本信息i 在定位行号前插入新文本信息d 删除定位行c 用新文本替换定位文本s 使用替换模式替换相应模式r 从另一个文件中读文本w 写文本到一个文件q 第一个模式匹配完成后推出或立即推出 在定位行执行的命令组n 从另一个文件中读文本下一行,并附加在下一行y 传送字符n 延续到下一输入行;允许跨行的模式匹配语句实例:1 打印:p命令#sed /north/p datafile 默认输出所有行,找到north的行重复打印#sed n /north/p datafile禁止默认输出,只打印找到north的行#sed -n /west/,/east/p datafile打印在west和east之间的模式范围内所有行。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 -n s/Hemenway/Jones/gp datafile所有的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。#sed -n s/(Mar)got/1ianne/p datafile模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。在替换串里它将被引用做1。然后用Marianne替代Margot。4 多次编辑 -e 选项#sed -e 1,3d -e s/Hemenway/Jones/ datafile5 从文件中读取:r命令#sed /Suan/r newfile datafiler命令从newfile中读取内容,将内容输出到Suan的后面。6 写入文件:w命令#sed -n /north/w newfile datafilew命令把指定的行写入到一个文件。7 添加:a命令#sed /north/a THE NORTH SALES DISTRICT HAS MOVED 插入:i命令# sed /north/i THE NORTH SALES DISTRICT HAS MOVED datafile在符合模式的行前面插入内容。其余和a命令相同。9下一个:n命令#sed /eastern/n;s/AM/Archie/; datafile10变换:y 命令#sed 1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/ datafile将对应字母进行转换。11退出:q 命令#sed 5q datafile在打印了5行之后,用q命令退出sed程序。三 Awk1. 什么是awkAwk是一种程序语言,对文本文件的处理具有很强的功能,如修改、比较、提取、打印等。awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。2. 如何执行awk程序Awk程序可以直接在命令行中执行,也可以存放在文件然后在命令行调用。方法一:直接在命令行中执行#gawk program input-file1 input-file2方法二:调用awk程序文件#gawk f program-file input-file1 input-file2任何a w k语句都由模式和动作组成。在一个a w k脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段B E G I N和E N D。使用B E G I N语句设置计数和打印头。B E G I N语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。E N D语句用来在a w k完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式, a w k总是匹配或打印行数。实际动作在大括号 内指明。动作大多数用来打印,但是还有些更长的代码诸如i f和循环语句及循环退出结构。如果不指明采取动作, a w k将打印出所有浏览出来的记录。3. 认识文件中的记录和域域1 分隔符 域2 分隔符 域3 分隔符 域4 abc # 0 2 / 9 9 # 4 8 # finel 默认文件中以换行符结束的行称为记录,awk中可以指定记录分隔符,也可以用$0引用整个记录l 记录是由若干个域构成的,域之间由指定的分隔符隔开,默认分隔符为空格。可以用$1$n引用记录中的各个域4. 正则表达式和运行算符(1) 算术运算符:+ - *、/ %(取余) (乘方)(2) 关系运算符: = = != (匹配) !(不匹配)(3) 逻辑运算符:& | !(4) 赋值运算符:= += -= *= /= %= =(5) 自增、自减运算符:+ -(6) 数组引用:in5. awk变量和数组(1) awk变量分为数值型和字符型,用户引用变量时即定义了变量,变量类型由变量内容决定,引用变量时不用加$。(2) awk内置变量如下l ARGC 命令行参数的数目。l ARGIND 命令行中当前文件的位置(从0开始算)。l ARGV 包含命令行参数的数组。l CONVFMT 数字转换格式(默认值为%.6g)l ENVIRON 环境变量关联数组。l ERRNO 最后一个系统错误的描述。l FIELDWIDTHS 字段宽度列表(用空格键分隔)。l FNR 同NR,但相对于当前文件。l FS 字段分隔符(默认是任何空格)。l IGNORECASE 如果为真,则进行忽略大小写的匹配。l NF 当前记录中的字段数。l NR 当前记录数。l OFMT 数字的输出格式(默认值是%.6g)。l OFS 输出字段分隔符(默认值是一个空格)。l ORS 输出记录分隔符(默认值是一个换行符)。l RLENGTH 由match函数所匹配的字符串的长度。l RS 记录分隔符(默认是一个换行符)。l RSTART 由match函数所匹配的字符串的第一个位置。l SUBSEP 数组下标分隔符(默认值是034)。(3) awk数组awk允许使用数组,数组的格式如下。Varname下标awk数据组的下标可以数字(从1开始)和字符表示,name1、namea。6awk输出命令 输出命令是awk最常用的操作命令,它包含print和printf两种方式。(1) print#awk print $0 /etc/passwd(2)printf(格式化输出)格式:printf “输出格式”,表达式实例:#awk printf “user name:%s”,%1 /etc/passwd注:print和printf语句中常用的转义字符和格式符-转义字符l t table制表位l n 换行符l 表示“”l b 表示退格-格式符l %c 输出单个字符l %d %i 输出整数l %e 按科学计数法输出小数l %f 输出浮点数l %s 输出字符串l % 输出%7Awk控制语句(1) if语句功能:实现条件分支格式:if (expr) action1 else action2实例:#awk -F: if ($3=0) print $0 /etc/passwd(2) for语句功能:实现循环执行格式:for (init_cntr;test_cntr;incr_cntr)action实例:#awk for (i=1;i5;i+) printf “%s”,$i;printf “:” print “n”(3) while语句功能:实现循环执行格式:while (expr) action实例:#awk i=1;while (i5) printf “%s”,$i;printf “:” print “n” 注:还有一种dowhile形式(4) break和continue退出循环和进行下一次循环(5) exit退出awk(6) next跳过后面内容,读取下一行8.awk函数length(string)求串string中的字符个数index(search,string)返回string中search串的位置 match(string,reg)返回常规表达式reg匹配的st

温馨提示

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

最新文档

评论

0/150

提交评论