Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2268446
  • 博文数量: 293
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2170
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-31 14:30
个人简介

自己慢慢积累。

文章分类

全部博文(293)

分类: LINUX

2015-04-07 17:05:44

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末 尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
如果加上 -i  则是直接编辑文件

替换行举例:

以下都是对file这个文件进行操作

文件内容如下

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow

[root@server1 shell]# sed '1,2d' file        #删除第一,二行的内容
c=3
z=jxow

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow
[root@server1 shell]# sed '7,$d' file    #删除低七行到末尾的内容
a=1
b=2
c=3
z=jxow

a=1
[root@server1 shell]# sed '$d' file    #删除最后一行的内容
a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3
z=jxow

a=1
b=2
c=3

[root@server1 shell]# sed 's/a=1/a=3/' file    #替换a=1为a=3,这个只是简单的匹配某一行第一个a=1,后面不会进行匹配,如果想匹配,加上参数g,命令格式如sed 's/a=1/a=3/g' file
a=3
b=2
c=3
z=jxow

a=3
b=2
c=3
z=jxow

a=3
b=2
c=3
z=jxow

a=3
b=2
c=3
z=jxow

[root@server1 shell]# sed 's/a=1/&a=2/g' file    #&符号表示替换换字符串中被找到的部份
a=1a=2
b=2
c=3
z=jxow

a=1a=2
b=2
c=3
z=jxow

a=1a=2
b=2
c=3
z=jxow

a=1a=2
b=2
c=3
z=jxow

[root@server1 shell]# sed -n '/a=1/p' file    #找到行中有a=1,参数n要求显示只是匹配行
a=1
a=1
a=1
a=1
[root@server1 shell]# sed 's#a=1#a=3#g' file    #不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有a=1替换成a=3

a=3
b=2
c=3
z=jxow

a=3
b=2
c=3
z=jxow

a=3
b=2
c=3
z=jxow

a=3
b=2
c=3
z=jxow

[root@server1 shell]# sed -n '/a=1/,/c=3/p' file    #打印范围a=1到c=3之间的东西,包括自己
a=1
b=2
c=3
a=1
b=2
c=3
a=1
b=2
c=3
a=1
b=2
c=3

[root@server1 shell]# sed -n '3,/a=1/p' file    #打印从第三行开始到第一个包含以a=1开始的行之间的所有行。
c=3
z=jxow

a=1

[root@server1 shell]# sed '/c=3/r test' file    #显示在与c=3匹配的行后面,如果匹配多行,则test的内容将显示在所有匹配行的下面。  
a=1
b=2
c=3
d=4
z=jxow

a=1
b=2
c=3
d=4
z=jxow

a=1
b=2
c=3
d=4
z=jxow

a=1
b=2
c=3
d=4
z=jxow

[root@server1 shell]# sed '/c=3/w test' file    #将匹配出来的结果写到文件test里面

[root@server1 shell]# cat test 
c=3
c=3
c=3
c=3

[root@server1 shell]# sed '/a=1/{n;s/b=2/b=4/g}' file    #-如果file被匹配,则移动到匹配行的下一行,替换这一行的b=2,变为b=4,并打印该行,然后继续。  
a=1
b=4
c=3
z=jxow

a=1
b=4
c=3
z=jxow

a=1
b=4
c=3
z=jxow

a=1
b=4
c=3
z=jxow

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