首页 > 代码库 > linux基础--sed编辑器详解

linux基础--sed编辑器详解

1、sed简介

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

  sed默认不编辑源文件,仅对模式空间中的数据作处理。处理结束后,将模式空间打印。

2、命令语法

sed [options] ‘command‘ file(s)

3、命令使用示例

将data.inc.php中从mysql_dlevent到mysql_activation之间的root替换成killtr
sed -i -e "/mysql_dlevent/,/mysql_activation/s/root/killtr/"  config/data.inc.php

4、常见options选项

-n:静默模式,只显示符合条件的行,不再默认显示模式空间中的内容。


5、常见command参数

 d:删除指定行

[root@liang-study scripts]# sed ‘1,2d‘ /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
#删除/etc/passwd中1-2行的数据
[root@liang-study scripts]# sed ‘3,$d‘ /etc/passwd
#删除/etc/passwd中第3行到最后一行的数据
[root@liang-study scripts]# sed ‘/root/d‘ /etc/passwd
#删除包含root的行
[root@liang-study scripts]# sed ‘1,+2d‘ /etc/passwd
#删除第一行和第一行后2行的数据
[root@liang-study scripts]# sed ‘/^\//d‘ /etc/fstab 
#删除以/开头的行,注意匹配的/需要转义

p:显示指定行

[root@liang-study scripts]# sed ‘/^\//p‘ /etc/fstab  
proc                    /proc                   proc    defaults        0 0
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
#注:上例为显示以/开头的行,需要注意的是默认目标文件中匹配的行显示两次,没有匹配的行显示一次,这是因为sed默认是读一行显示一行,而p匹配到的则会单独显示,因此就会匹配到的就会显示两次。可以使用sed选项来处理。
[root@liang-study scripts]# sed -n ‘/^\//p‘ /etc/fstab 
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
#使用-n选项只显示匹配到的行。

a \string:在指定的行后追加新航,内容为string。

[root@liang-study scripts]# sed ‘/^\//a \#hello liang‘ /etc/fstab       
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
#hello liang
#在/etc/fstab中以/开头的行后增加#hello liang
[root@liang-study scripts]# sed ‘/^\//a \#hello liang\n#hello linux‘ /etc/fstab    
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
#hello liang
#hello linux
#在/etc/fstab中以/开头的行后增加两行

i \strig:在指定的行前追加新航,内容为string,用法和a \string一样。

r FILE:将指定文件的内容添加到符合条件的行后。

[root@liang-study scripts]# sed ‘/chenchao/r /etc/issue‘ /etc/fstab
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
CentOS release 6.8 (Final)
Kernel \r on an \m
#将/etc/fstab中包含chenchao字符串的行后加入/etc/issue的内容
[root@liang-study scripts]# sed ‘$r /etc/issue‘ /etc/fstab          
/dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
CentOS release 6.8 (Final)
Kernel \r on an \m
#将/etc/fstab中最后一行后加入/etc/issue的内容
[root@liang-study scripts]# sed ‘2r /etc/issue‘ /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
CentOS release 6.8 (Final)
Kernel \r on an \m
#将/etc/passwd中第二行后加入/etc/issue的内容




本文出自 “亮公子” 博客,请务必保留此出处http://iyull.blog.51cto.com/4664834/1884659

linux基础--sed编辑器详解