首页 > 代码库 > shell编程(七)--- sed的用法
shell编程(七)--- sed的用法
sed:称为流编辑器,也称为行编辑器。
sed处理过程:sed读取源文件中的一行,并将其放在临时缓冲区中,这个缓冲区称为模式空间,使用相应的模式对模式空间进行处理,并将处理的结果显示到屏幕上,并不会影响源文件,处理结束后,将模式空间中的内容显示至屏幕。
sed格式:
sed [options] ‘AddressCommand‘ file ... options: -n:静默模式,不显示模式空间中的内容,默认显示默认空间中的内容。常和p命令一起使用。 -i:直接修改源文件的内容。 -e ‘AddressCommand‘ -e ‘AddressCommand‘:同时执行多个脚本。 -f:指定sed脚本文件的路径。 -r:默认情况下,sed只支持基本的正则表达式,如果要使用扩展表达式,需要用-r选项。
Address格式
1.StartLine,EndLine 如: 1,100:表示的是从第一行到第100行。 $:表示的是最后一行。 2./RegEXP/ 正则表达式。 如:/^root/以root开头的行。 3./pattern1/,/pattern2/ 表示的是从第一次被pattern1模式匹配的行开始,到第一次配patter2匹配的行结束,中间的所有行。 4.LineNumber 表示的一个指定的行号。 5.StartLine,+N 表示的是从startline行开始,向后的N行,总共N+1行,包括当前行和后面的N行。
Command格式
d:删除符合条件的行。 p:显示符合条件的行。 a \"string":在指定的行后面追加新行,内容为string。如果想追加多行的话,需要使用\n。
示例:
[root@Server3 tmp]# cat bond0 | sed ‘/USERCTL/a \Hello1\nHello2‘ DEVICE=bond0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet IPADDR=172.17.100.252 NETMASK=255.255.255.0 GATEWAY=172.17.100.2 USERCTL=no Hello1 Hello2 IPV6INIT=yes [root@Server3 tmp]#
i \string:在指定行的前面添加新行,内容为string。添加多行,使用\n。 r file:在指定行的后面读取file文件的内容并添加到行后。 w file:将指定范围内的内容另存至file文件中。 s/pattern/string/ :将pattern匹配到的内容替换为string。只对每行中第一个被模式匹配到的字符串进行替换。 s/pattern/string/g :将pattern匹配到的内容替换为string。对每行中的所有被匹配的模式进行替换。 s/pattern/string/i :将pattern匹配到的内容替换为string,在查找时,忽略大小写。 注意:s后面的/可以是分隔符,其他的很多字符也都可以作为分隔符,如s#root#frame#g这种格式。
pattern中的元字符
^:行首定位符。如/^my/表示匹配所有以my开始的行。 $:行尾定位符。如/my$/表示匹配所有以my结尾的行。 .:匹配除换行符以外的任意单个字符。如/m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行。 *:表示匹配前一个字符出现0次或多次。如/my*/ 匹配包含字母m,后跟零个或多个y字母的行。 []:表示匹配范围内的任意一个字符。如/[Mm]y/ 匹配包含My或my的行。 [^]:表示匹配不再指定范围外的任意一个字符。如/[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行。 \(..\):保存已匹配的字符。如1,20s/\(you\)self/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。 &:保存查找串以便在替换串中引用。如s/my/**&**/ 符号&代表查找串。my将被替换为**my** \<:词首定位符。如/\<my/ 匹配包含以my开头的单词的行。 \>:词尾定位符。如/my\>/ 匹配包含以my结尾的单词的行。 x\{m\}:连续m个x。如/9\{5\}/ 匹配包含连续5个9的行。 x\{m,\}:至少m个x。如/9\{5,\}/ 匹配包含至少连续5个9的行 x\{m,n\}。至少m个,但不超过n个x。如/9\{5,7\}/ 匹配包含连续5到7个9的行 如下这些同样可用: [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1435548
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。