首页 > 代码库 > sed命令总结

sed命令总结

在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理。


什么是sed?

  sed是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结构。默认情况下,所有的输出行都被打印到屏幕上。


sed的处理过程是什么?

  sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed先把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入。进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。

sed命令语法

sed [option] ‘AddressCommand‘ file....


常用的option选项参数如:

-i:修改源文件

-n:静默模式


Address

基本可以将其理解为对行的匹配,比如我有个100行的文件,现在有只想对它的第二行到第五行进行删除,这个就是Address

1、StartLine,EndLine 比如1,100

m,n:表示删除第m行到底n行,例如‘2,5d‘,表示删除第2行到第5行

m,$:表示删除第m行到最后一行,$-1位倒数第2行

2、使用模式/Pattern/   使用正则表达式

一旦可以使用正则表达式之后,就会很灵活了

sed ‘/root/d‘ /etc/passwd   #找到root匹配的行,然后进行删除

3、/pattern1/,/pattern2/  表示第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束

这个和之前的范围有点类似,但是他又是正则表达式的匹配

sed ‘/root/,/^mysql/d‘ /etc/passwd  ##这个有问题

4、LineNumber 表示指定的行

例如‘3d‘,表示删除第3行

5、StartLine,+N 表示从startline开始,向后N行,总数N+1行

sed ‘1,+1/d‘ /etc/passwd


Command

d:表示删除符合要求的行

p:显示符合条件的行

a \string :表示在指定的行后面追加新行,内容为string

i \string:表示在指定的行前面追加新行,内容为string

r filename:将指定的文件的内容添加至符合条件的行处

w filename:将指定范围内的内容另存至指定的文件中

s /pattern/string/:查找并替换默认只替换每行中第一次被模式匹配到的字符串,修饰符g表示全局替换

s #pattern#string#:查找并替换默认只替换每行中第一次被模式匹配到的字符串,修饰符g表示全局替换

s @pattern@string@:查找并替换默认只替换每行中第一次被模式匹配到的字符串,修饰符g表示全局替换

&:引用匹配模式的整个串 例如sed ‘s/s..p/&r/‘ /etc/fstab 整个s..p的文件后面换成s..pr

\(\):后项引用sed ‘s/\(s..p\)/\1r/‘ /etc/fstab  表示s..p表示在第1项后面加1  看操作理解sed ‘s#s\(..p\)#S\1#‘ /etc/fstab


练习:

1、删除/etc/grub.conf文件中的行首的空白符

sed ‘#\<^$\>#d‘ /etc/grub.conf

2、删除/etc/inittab文件中"id:5:initdefault:" 一行中的数字为3

sed ‘s#id\:5\:initdefault\:#id\:3\:initdefault\:#‘ /etc/inittab 

3、删除/etc/inittab文件中的空白行

sed ‘/^#/d‘ /etc/inittab

4、删除/etc/inittab文件中开头的#号

sed ‘s/^#//‘ /etc/inittab

5、删除/etc/inittab文件中开头的#号及后面的空白字符,要求#号后面必须有空白字符

sed ‘s/^#/ /‘ /etc/inittab


本文出自 “常想一二” 博客,请务必保留此出处http://250919938.blog.51cto.com/962010/1918599

sed命令总结