您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > sed基础用法和笔试题
1.sedsed是一个非交互性流编辑器,必须通过行号或正则表达式指定要改变的文本行。和grep与awk一样,sed是一种重要的文本过滤工具,或使用一行命令、或使用管道与grep与awk相结合。1.1.sed怎样读取数据sed从文件的一个文本行或标准输入的几种格式中读取数据,将之copy到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。记住:sed不与原始文件打交道,它操作的只是一个copy,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。1.2.调用sed1)sed命令行sed[option]sed-commandinput-files记住:在命令行使用sed命令时,实际命令要加单引号(这样可以禁用shell扩展)。Sed也允许加双引号。2)将sed命令插入脚本文件,然后调用sedsed[option]-fsed脚本文件输入文件3)将sed命令插入脚本文件,并使sed脚本可执行sed脚本文件[option]输入文件第一行要具有sed命令解释器不管使用上述那种方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。1.3.保存sed输出由于不接触原始文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件即可。sed‘some-sed-commands’input-filemyoutfile1.4.使用sed在文件中查找文本的方式sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:1)使用行号,可以是一个简单数字,或是一个行号范围行地址$sed-e'1d'/etc/services|more使用sed从输出流除去/etc/services文件第一行“-e”选项:指定下一条是编辑命令,在有多项编辑命令时加入此选项。如果只用到一条命令,可省略。地址范围$sed-e'1,10d'/etc/services|moresed将删除输出的第1到10行用逗号将两个地址分开时,sed将把后面的命令应用到从第一个地址开始、到第二个地址结束的范围。在本例中,将'd'命令应用到第1到10行(包括这两行)。所有其它行都被忽略。2)使用正则表达式$sed-e'/^#/d'/etc/services|moresed删除以'#'开始的行规则表达式地址总是由斜杠括起。它们指定一种模式,紧跟在规则表达式地址之后的命令将仅适用于正好与该特定模式匹配的行。$sed-n'/test/,/check/p'example所有在模板test和check所确定的范围内的行都被打印。-n选项表示不打印输出结果。加编辑命令p将使-n选项无效,表示只打印那些发生编辑的行$sed-n'5,/^test/p'example打印从第五行开始到第一个包含以test开始的行之间的所有行。xx为一行号,如1x,y表示行号范围从x到yx,y!查询不包含指定行号x和y的行1,2!/pattern/查询包含模式的行/disk/或/[a-z]//pattern/pattern/查询包含两个模式的行/disk/disks/在给定行号上查询包含模式的行/ribbon/,3x,/pattern/通过行号和模式查询匹配行3,/vdu/1.5.基本sed编辑命令p打印匹配行=显示文件行号a\在定位行号后将新文本插入匹配行的下一行i\在定位行号后将新文本插入到匹配行的前一行c\用新文本替换定位文本d删除定位行s使用替换模式替换相应模式r从另一个文件中读文本w写文本到一个文件q第一个模式匹配完成后退出或立即退出l显示与八进制ASCII代码等价的控制字符{}在定位行执行的命令组n移动到匹配行的下一行延续到下一输入行;允许跨行的模式匹配语句g将模式2粘贴到/patternn/y用替换模式替换查找模式,前后两个模式的字长要相同。h将模式空间的内容复制并存入保持缓存区内,待以后使用G取出保持缓冲区的行,然后把它放回模式空间中x取出保持缓冲区的行,然后用它替换模式空间的内容&保存发现模式以便重新调用它,然后把它放在替换字符串里面。#sed'2p'grade.txtM.Tansley05/9948311Green84044J.Lulu06/9948317green92426J.Lulu06/9948317green92426P.Bunny02/9948Yellow123528J.Troll07/994842Brown-3122626L.Tansley05/994712Brown-2123028#sed-n'2p'grade.txtJ.Lulu06/9948317green92426##sed-n'1,2p'grade.txtM.Tansley05/9948311Green84044J.Lulu06/9948317green92426#sed-n'/Bunny/p'grade.txtP.Bunny02/9948Yellow123528#sed-n'/Tansley/'pgrade.txtM.Tansley05/9948311Green84044L.Tansley05/994712Brown-2123028#sed-n'1,/Tansley/'pgrade.txtM.Tansley05/9948311Green84044M.Lulu06/9948317green92426P.Bunny02/9948Yellow123528J.Troll07/994842Brown-3122626L.Tansley05/994712Brown-2123028#sed-n'5,/Tansley/'pgrade.txtL.Tansley05/994712Brown-2123028#sed-n'/\$/'pgrade.txt//匹配元字符$前,必须使用反斜线\屏蔽其特殊含义。M.Lulu06/9948317green92426$20#sed-n'1p'grade.txt//打印第一行#sed-n'$p'grade.txt//打印最后一行要打印整个文件,只需将行范围设为第一行到最后一行1,$。$意为最后一行。#sed-n'1,$p'grade.txtM.Tansley05/9948311Green84044M.Lulu06/9948317green92426$20P.Bunny02/9948Yellow123528J.Troll07/994842Brown-3122626L.Tansley05/994712Brown-2123028#sed-n'/.*ing/p'grade.txt匹配任意字母,后跟任意字母的0次或多次重复,并以ing结尾,模式为/.*ing/。可以使用这个模式查询以ing结尾的任意单词。打印行号要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/=#sed-e'/Troll/='grade.txtM.Tansley05/9948311Green84044M.Lulu06/9948317green92426$20P.Bunny02/9948Yellow1235284J.Troll07/994842Brown-3122626L.Tansley05/994712Brown-2123028#sed-n'/Troll/='grade.txt4#sed-n-e'/Troll/p'-e'/Troll/='grade.txtJ.Troll07/994842Brown-312262641.5.1.a:附加文本附加文本时不能指定范围,只允许一个地址模式。文本附加操作时,结果输出在标准输出上。注意它不能被编辑,因为sed执行时,首先将文件的一行文本拷贝至缓冲区,在这里sed编辑命令执行所有操作(不是在原始文件上),因为文本直接输出到标准输出,sed并无拷贝。要想在附加操作后编辑文本,必须保存文件,然后运行另一个sed命令编辑它。这时文件的内容又被移至缓冲区。附加操作格式如下:[address]a\Text\Text\……text地址指定一个模式或行号,定位新文本附加位置。a\通知sed对a\后的文本进行实际附加操作。观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。sed执行到这儿,将创建一新行,然后插入下一文本行。最后一行不加斜划线,sed假定这是附加命令结尾。当附加或插入文本或键入几个sed命令时,可以利用辅助的shell提示符以输入多行命令。$sed'/^test/a\\---thisisaexample'example“-----thisisaexample”被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。1.5.2.i:插入命令和附加命令一样,它也只接受一个地址。#viinsert.sed#!/bin/sed-f/Tansley/i\//也可以使用行号指定文本插入位置,如“1i\”W.Alicechmod+xinsert.sed#./insert.sedgrade.txtW.AliceM.Tansley05/9948311Green84044M.Lulu06/9948317green92426$20P.Bunny02/9948Yellow123528J.Troll07/994842Brown-3122626W.AliceL.Tansley05/994712Brown-2123028$sed'/test/i\\newline-------------------------'example如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。1.5.3.c:修改命令修改命令将在匹配模式空间的指定行用新文本加以替代,格式如下:[address]c\Text\Text\……text#vichange.sed#!/bin/sed-f5c\S.Icy./change.sedgrade.txtM.Tansley05/9948311Green84044M.Lulu06/9948317green92426$20P.Bunny02/9948Yellow123528J.Troll07/994842Brown-3122626S.Icy1.5.4.d:删除命令$sed-e'1d'/etc/services|more使用sed从输出流除去/etc/services文件第一行$sed-e'1,10d'/etc/services|moresed将删除输出的第1到10行$sed-e'/^#/d'/etc/services|moresed删除以'#'开始的行$sed'$d'example删除example文件的最后一行$sed'2,$d'example删除example文件的第二行到末尾所有行。$sed'/test/'dexample删除example文件所有包含test的行。1.5.5.s:替换文本替换(substitute)命令用替换模式替换指定模式,格式为[address[,address]]s/pattern-to-find/replacement-pattern/[gpwn]s:通知sed这是一个替换操作,并查询pattern-to-find,成功后用replacement-pattern替换它。g:缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式p:缺省sed将所有被替换行写入标准输出,加p将使-n选项无效(-n不打印输出结果)w:文件名使用此选项将输出定向到一个文件sed‘s/night/NIGHT/’quote.txtsed‘s/\$//’quote.txtsed‘/The/Wow!/g’quote.txtsed‘s/splend/SPLEND/wsed.out’quote.txt如果要附加或修改一个字符串,可以使用(&)命令,&命令保存发现模式以便重新调用它,然后把它放在替换字符串里面。sed-n‘s/nurse/”hello”&/p’quote原句:ThelocalnurseMissP.Neavewasinattendance.修改:Thelocal”hello”nurseM
本文标题:sed基础用法和笔试题
链接地址:https://www.777doc.com/doc-7473424 .html