您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 14微型计算机技术-Linux系统管理_09_SED与AWK
LINUX系统管理(SED和AWK)LINUXESSENTIALSYSTEMADMINISTRATION大连理工大学软件学院·朱明2010年3月~5月VER1.7,朱明2007级公共选修课微型计算机技术(2)●章节提问^z可以使当前任务挂起至后台,试问(前次课提及该问题)如何查看当前挂起的任务列表并指定特定任务切换至前台运行?2&1是在很多Linux脚本中常见的一种写法,试问其中的1和2分别指代什么,这句话附加在别的命令后有什么特殊作用?如何查看/proc文件系统中所反映的当前系统的内核信息?如何临时修改/proc中的内核设置?如何临时修改/proc中的内核设置?2大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed(GNUsed)是一种几乎在所有的*nix平台上都包含的轻量级的流编辑器小巧,比其他脚本语言小很多流编辑器,可以更好的处理数据流(管道等输入)目前所使用的sed多为GNUsedsed在使用的时候常会用到正则表达式正则表达式(regularexpression,regexp)是用于描述字符串集的匹配模式的概念很多编程语言中会用到正则表达式3大连理工大学软件学院朱明微型计算技术(2)REGEXP=●基本的正则表达式假设系统中有Zombies文件,其内容如下我们要完成以下工作列出该文件中的所有内容?查找名字包含有关键字Zombie的行?查找名字包含有关键字head的行?查找名字里面没有包含Zombie字样的行?注意区分字母大小写grep的查找过程=..4大连理工大学软件学院朱明微型计算技术(2)ZombieFlagZombieConeheadZombiePoleVaultingBuckheadZombieDancingZombieZomboniZombieYeti●基本的正则表达式假设系统中有Zombies文件,其内容如下查找的过程注意:grep(-v)在查找的过程中,扫描Zombies文件中的每一行并查找字母Z,后面紧跟o,然后是m…,除了必须保证相邻外,这些字母能够出现在行的任何位置扩展我们的查找条件如果要查找叫做什么Zombie而不是仅仅有Zombie字样或者是Zombie什么的行呢?似乎单纯grep并不能满足这样的查找要求正则表达式可以实现特定特定位置的过滤5大连理工大学软件学院朱明微型计算技术(2)●基本的正则表达式正则表达式的可以描述的匹配特定位置的匹配行的开始或结束、单词的开始或结束特定长度的匹配固定长度、可变长度或不定长度的重复等特定内容的匹配匹配某一个字符(字母或数字等)特定范围的匹配字母(例如a-m)或数字(例如1-5)等的匹配字符的类别或种类(例如标点等)的匹配6大连理工大学软件学院朱明微型计算技术(2)●基本的正则表达式最基本的正则表达式的匹配(1)7大连理工大学软件学院朱明微型计算技术(2)表达式用途.匹配任意的单个字符^匹配任意行首或字符串首的空字符串(或理解为以^符后内容作为开头)$匹配出现在行末的空字符串(与^相反)A匹配大写字母A(可以类似推广)a匹配小写字母a(可以类似推广)\d匹配任意一位数字\D匹配任意一个非数字字符\w匹配任意一个数字、字母或下划线●基本的正则表达式最基本的正则表达式的匹配(1)例如\d\d的匹配love136能够匹配成功,匹配13例如a.\d的匹配asas998能够匹配成功,匹配as9在前面的文档中查找Zombie什么的行也就是该行内容以Zombie开头#grep-E^Zombie./Zombies-E/G参数表示Extended/Basicregexp但查找内容会包含Zombie行如何利用grep和$来修正上面的问题?8大连理工大学软件学院朱明微型计算技术(2)●基本的正则表达式最基本的正则表达式的匹配(2)例如[abc][abc]的匹配acdsee能够匹配成功,匹配ac例如[^abc]的匹配abc123能够匹配成功,匹配19大连理工大学软件学院朱明微型计算技术(2)表达式用途[A-Z]匹配A~Z(类似推广到任意范围英文字符)[0-9]匹配0~9(类似推广到任意范围数字字符)[^A-C]匹配除了A~C的任意字符(类似推广)[^0-1A-E]匹配除了0~1和A~E的任意字符●基本的正则表达式最基本的正则表达式的匹配(3)设计一个能匹配12.5、0.125这样一串可能包含有小数点的正数的表达式基本思路:数字+小数点+数字=有没有漏洞??10大连理工大学软件学院朱明微型计算技术(2)修饰符用途{n}表示前面的表达式重复了n次{m,}表示前面的表达式至少重复m次{m,n}表示前面的表达式重复m~n次?匹配最多一次(匹配0次或1次){0,1}+匹配最少一次(匹配1次以上){1,}*匹配最少零次(匹配0次以上){0,}●基本的正则表达式最基本的正则表达式的匹配(练习)尝试分析以下各项的匹配结果用[123][abc]匹配字符串abc123abc用^hello匹配字符串ohhellohaha用hello$匹配字符串ohhellohaha用go{2,5}le匹配字符串goooooooogle用.\b.匹配字符串@@@abc\b匹配一个单词(字母、数字等)的边界,也就是他们和符号之间的位置,但是\b不匹配任何一个字符可以将\b理解为\w与非\w内容之间的界限用\band\b匹配android,and,nand11大连理工大学软件学院朱明微型计算技术(2)●基本的正则表达式最基本的正则表达式的匹配(4)例如Jerry|Tom匹配Oh,TomandJerry能够匹配成功,依次能够匹配到Tom和Jerry例如(go\s*)+匹配gogogooleia~能够匹配成功,匹配到gogogo练习$(\d+\.?\d*)匹配$168.812大连理工大学软件学院朱明微型计算技术(2)修饰符用途|表示左右表达式为或的关系()括号内的内容作为一个整体表达式\s匹配空格、制表符等空白字符●基本的正则表达式最基本的正则表达式的匹配(5)*表达式('|)(.*?)(\1)匹配'hello',world第一次匹配'hello',第二次匹配world那么\1表示的是什么呢?\1表示匹配第一个括号中的内容,\2是第二个括号在匹配时要注意匹配的贪婪与非贪婪问题例如表达式(d)(\w+)匹配didadida该表达式匹配了didadida整个字符串,此时(\w+)表现出了贪婪特性,代表了idadida而表达式(d)(\w+)(a)匹配didadida该表达式同样匹配了didadida整个字符串,此时(\w+)表现出了非贪婪特性,代表了idadid13大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(1)建立文件file,8行,每行内容为1,2,3,……#sed-e'd'file查看运行结果,其中-e参数表示--expression=script,也就是说d是一个将要执行的编辑命令重新查看file文件中的内容,是否有改变结论:本示例中sed命令并没有改变file文件的内容,从sed工作原理的角度,sed逐行的将file文件的内容读入内部缓冲区,每读入一行执行一次'd'命令,然后将缓冲区的内容打印在终端上(此时实际的内部缓冲区已经没有内容)14大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(2)#sed-e'1d'file#sed-e'3d'file查看此时两种情况的运行结果重新查看file文件中的内容,是否有改变结论:本示例中sed命令也没有改变file文件的内容,示例中的sed所执行的命令'1d'和'3d'中的1和3表示了数字地址,通过数字地址的使用,可以控制sed只对某一行或某些特定行进行编辑#sed-e'1,3d'aaa,对第一至三行进行编辑#sed-e'3,$d'aaa,对第一至最后行进行编辑15大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(3)原文件中有效代码的筛选(过滤#开头内容)正则表达式以#开头的内容^#不显示该内容则在sed读入的缓冲区中将内容删除,使用d#sed-e'/^#/d'file该行命令在sed将file文件的内容读入到缓冲区后,根据正则表达式判定当前行是否符合要求,在sed中,要求正则表达式的内容使用/括起来,一旦满足该正则表达式,即执行d命令16大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(4)#sed-n-e'/BEGIN/,/END/p'file-n参数与后面的p(print)打印命令配合,表示仅仅打印能够匹配的范围,这里能够匹配的范围指任意包含BEGIN的开始至第一个任意包含的END的结束特别特别需要注意的是,这种查找和匹配是循环的#sed-n-e'/main[[:space:]]*(/,/^}/p'file.c操作对象file.c是一个遵循常规格式的C语言源文件起始部分[[:space:]]在sed中特定用来匹配TAB或者空格,*遵循正则表达式的规则(Page18)结束部分^}也遵循正则表达式的规则请尝试分析一下这句话的作用和优缺点17大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的字符匹配问题与[:space:]类似的sed中的字符匹配举例[:alnum:][a-zA-Z0-9][:alpha:][a-zA-Z][:blank:]spaceorTab[:digit:][0-9][:lower:][a-z][:space:]space[:upper:][A-Z][:xdigit:][0-9a-fA-F]18大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(5)#sed-e's/93111/93222/'homework.txts命令用于替换,将93111替换为93222,并将替换后的内容输出到标准输出sed是流处理工具,因此他每次处理的对象是他读入到缓冲区的一行,而匹配的执行过程也是从当前行的行首开始匹配,一旦完成匹配等工作,他就不再尝试访问该行的后续内容如果该行的内容是200793111啊93111则有何后果可以使用全局参数g(全局也是指该行)#sed-e's/93111/93222/g'homework.txt此时的sed在匹配第一次之后将尝试继续匹配整行的19大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(6)sed支持组合的匹配形式和规则(2)中介绍了范围,(5)中介绍了替换规则要在一定范围中实现替换,(2)和(5)的综合#sed-e'1,15s/hello/hi/g'article.txt将1至15行中所有的hello字样替换为hi字样#sed-e'/^$/,/^END/s/hills/shan/g'poem.txt仔细思考一下他的匹配开始是什么、他的匹配结束时什么、在这个范围内将执行什么样的操作把某文件中的/usr/local替换为/usr如何操作#sed-e's/\/usr\/local/\/usr/g'file#sed-e's:/usr/loca:/usr:g'file(用:替代了原有/)20大连理工大学软件学院朱明微型计算技术(2)●SED流编辑器sed的执行示例(7)sed在行内匹配的时候是贪婪的#sed-e's/.*//g'file上面这句话的作用在于将整行位于以及之间的内容替换成为一个空字符串,如果对下面这段话使用bOh/b,bmy/bgod而sed表现出贪婪的特性将匹配第一个和最后一个,结果却为NO,如果我们对这句话操作的目的仅仅是去掉成对的和呢#sed-e's/[^]*//g'file注意这里[^]的
本文标题:14微型计算机技术-Linux系统管理_09_SED与AWK
链接地址:https://www.777doc.com/doc-6280156 .html