sed使用

Posted wyglog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed使用相关的知识,希望对你有一定的参考价值。

SED是一种在线的、非交互式的编辑器,它一次处理一行内容。和awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作; 编写转换程序等。

  

命令格式

先准备一个文件

[root@slave ~]# head /etc/passwd |grep -n ‘‘   > mypasswd
[root@slave ~]# cat mypasswd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin 

处理单个文件的命令格式

sed     [options]   ‘[匹配模式]     sed 的内部命令‘       file1

处理多个文件的命令格式

sed     [options]   ‘[匹配模式]     [sed 的内部命令]‘       file1  file2

options 选项是可选的,意思就是没有也行
匹配模式 是可选的用于在文件中每一行进行匹配到模式,模式可以是正则,也可以是文件的行号
内部的命令也是可选的,没想到吧,但是两个单引号是必须的

[root@slave ~]# sed ‘‘ mypasswd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...以下输出省略...

注:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才是非0

 

一些内部选项:

e command,--expression=command允许多台编辑。
-h,--help打印帮助,并显示bug列表的地址。
-n,--quiet,--silent取消默认输出。
-f,--filer=script-file引导sed脚本文件名。
-V,--version打印版本和版权信息。
 
部分命令实例:
 
删除:d命令
$ sed ‘2d‘ example-----删除example文件的第二行

 

替换:s命令
$ sed ‘s/test/mytest/g‘ example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
$ sed -n ‘s/^test/mytest/p‘ example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
 
追加命令:a命令
$ sed ‘/^test/a\--->this is a example‘ example<-----‘this is a example‘被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
 

插入命令:i

# sed -r ‘2i1111111111111‘ /etc/hosts
# sed -r ‘2i111111111> 2222222222> 3333333333‘ /etc/hosts

修改命令:c

# sed -r ‘2c1111111111111‘ /etc/hosts
# sed -r ‘2c111111111111> 22222222222> 33333333333‘ /etc/hosts

选定行的范围:逗号
$ sed -n ‘/test/,/check/p‘ example-----所有在模板test和check所确定的范围内的行都被打印。
$ sed -n ‘5,/^test/p‘ example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。
$ sed ‘/test/,/check/s/$/sed test/‘ example-----对于模板test和check之间的行,每行的末尾用字符串sed test替换

以上是关于sed使用的主要内容,如果未能解决你的问题,请参考以下文章

linux 特殊符号怎样用sed替换

Sed - 查找和替换 html 代码中的文本(从一种语言到另一种语言)

使用sed替换apache2.conf文件中的代码块内的文本

转载:shell脚本之sed使用----替换变量转义字符

sed 删除

Mac 下如何使用sed -i命令