Chinaunix首页 | 论坛 | 博客
  • 博客访问: 405302
  • 博文数量: 78
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:39
文章分类

全部博文(78)

文章存档

2016年(7)

2015年(1)

2014年(35)

2013年(35)

我的朋友

分类: LINUX

2014-05-23 11:27:02

sed全名叫stream editor,流编辑器。用来对文本进行过滤与替换工作, sed通过输入读取文件内容,但一次仅读取一行内容进行某些指令处理后输出,sed更适合于处理大数据文件。

演示文本test.txt

deb natty universe

deb-src natty universe

deb natty-updates universe

deb-src natty-updates universe

l  s命令:

sed s/ubuntu/debian/ test.txt

将每一行的第一个ubuntu替换成debian了,但是后面的并没有替换,如果希望替换一行里所有的匹配字串,需要在s替换命令的最后加上g标记(gglobal的意思)

sed s/ubuntu/debian/g test.txt

sed可以用#号,或者@号,或者%,^号来代替/号做分隔符号,这样就无需加转义符号来处理匹配串中的/号了,比如我们用file:///来替换http://可以写成sed s#

注:上述的sed并没有对文件的内容改变,只是把处理过后的内容输出,如果想将操作后的结果直接写回原文件,你可以给sed命令加上 -i选项sed –i s/ubuntu/debian/g test.txt;或重定向。

l  p命令

将匹配行的整行内容输出,语法 /匹配正则表达式/p。(功能与grep相似)

sed /deb-src/p test.txt

deb natty universe

deb-src natty universe

deb-src natty universe

deb natty-updates universe

deb-src natty-updates universe

deb-src natty-updates universe

       可以看到匹配的行打印了两遍,原因是sed在处理文本的时候,顺序的处理每一个输入行,默认情况下输入行也会作为输出行打印出来,如果要禁用默认输出,需要加 -n选项。

       sed -n /deb-src/p test.txt

              deb-src natty universe

deb-src natty-updates universe

l  d命令

d命令的功能和p的功能相反,将匹配行删除。语法 /匹配正则表达式/d。(功能与grep –v 相似)

sed -n /deb-src/p test.txt

deb natty universe

deb natty-updates universe

l  操作区/地址(ADDRESS)

标准的一个sed命令其实分为两部分,分别为ADDRESSCOMMANDS。一条完整的命令是sed “ADDRESS COMMANDS“ filelist,其意思是对ADDRESS操作空间里的内容执行COMMANDS里的命令。如:只对某一行处理sed  "4  s#" test.txt

       address可以是一个数字,也可以是一个模式,你可以通过逗号要分隔两个address 表示两个address的区间,参执行命令cmd

l  命令行选项

-s separate,意思是将传入命令的文件参数分别对待,而不是将多个文件合成一个再处理。

-i in-place,意思就是输出结果写回原文件。-iSUFFIX选项还可以跟一个后缀参数,作用是在你文件操作修改原来文件的同时,会将那个文件以指明的后缀进行备份。

-r 扩展的正则表达式支持,使用该选项后可以使你的正则表达式更加简洁,省去一些不必要的反斜杠。

l  模式空间(pattern space)

sed的以1行为一个执行周期,完整过程如下:

1. 从输入流中读取一行,将该行放入模式空间。 可以将其理解为一个行缓冲区

2. 在条件满足的情况下,对该模式空间进行指定的命令操作。 所谓的条件,就是命令前的地址部分。看该行是否在命令前指定的那个ADDR

3. 指定的命令执行完毕后,自动输出该模式空间。 如果在sed运行时加了-n选项,则不会自动打印输出模式空间

4. 抛弃模式空间的内容。读入下一行,开始一个新的周期。

l  a (append)命令、i (insert)命令和c (change)命令

命令a\TEXT的作用是在一个sed处理周期结束后,输出内容TEXT

命令i\TEXT的作用是在执行到这个命令的时候立刻输出内容TEXT

命令c\TEXT的作用是执行到该命令的时候删除模式空间,并且输出TEXT的内容(替换匹配行)

阅读(1317) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~