sed 工作原理

sed即Stream Editor,和vi不同,sed是行编辑器。

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。

 

Sed 基本用法

格式:

sed  [-Options]   ‘script;script;…’  filename

其中script是一个sed命令,sed命令一定要被包含在一对单引号中,可以是多个

 

常用选项:

-n    不自动打印

-e 多点编辑

-f 从指定文件中读取编辑脚本

-r,-E    使用扩展正则表达式

-i.bak 备份文件并原处编辑

-s 将多个文件视为独立文件,而不是单个连续的长文件流

注:

-ir  不支持

-i  -r  支持

-ri  支持

-ni  危险选项,会清空文件

 

script命令格式:地址(比如哪些行)+命令(比如增删改查)

1.不给地址:对全文进行处理 (默认自动打印)

P  打印当前模式空间的内容,追加到默认输出之后(不取消自动打印会重复打印)

 

-n      关闭默认打印 

 

2. 单地址

#:指定的行

sed -n ‘3p’ passwd  

 

$:最后一行  

sed -n ‘$p’  passwd

 

/pattern/:被此模式所能够匹配到的每一行

打印 etc/fstab 非#号行 :sed -n ‘/^[^#]/p’ /etc/fstab

 

3.地址范围

#,#  从第#行到第#行,如3,6 从第3行到第7行

seq 10 | sed -n ‘3,6p’

 

#,+#  从第#行到第+#行,如3,+4 从第3行到第7行

 

/pat1/ ,/ pat2/    打印以d开头的行到以s开头的行

sed -n ‘/^d/,/^s/p’ /etc/passwd

 

4.步进:~

  1~2  奇数行

  2~2  偶数行

 

命令:

Ip  忽略大小写输出

 

d  删除模式空间匹配的行,并立即启用下一轮循环

 

a [\]test  在指定行后面追加文本,支持使用\n实现多行追加

 

多行追加

 

 

i [\]test  在行前面插入文本

 

c [\]test  替换行为单行或多行文本

 

w file    保存模式匹配的行至指定文件

sed -n ‘/^b/w ./sedleatn/sed.log’  /etc/passwd

 

r  file  读取指定文件的文本至模式空间中匹配到的行后

 

=    为模式空间中的行打印行号

 

正则表达式  

.    代表且只能代表一个字符
\    转义字符。例\.就只代表本身
*    重复0个或多个前面的一个字符,例o*匹配没有o,有1个o或多个oooooo
.*   匹配所有字符
^word   匹配以world开头的内容 vi/vim 里面^代表一行的开头
word$   匹配以word结尾的内容 vi/vim 里面$代表一行的结尾
^$       表示空行
[abc]     匹配字符集合内的任意一个字符[a-zA-Z],[0-9]
[^abc]   匹配不包含^之后的任意一个字符的内容
a\{n,m\}   重复n到m次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{n,\}      重复至少n次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{n\}     重复n次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线
a\{,m\}      最多m次

+    表示重复“一个或一个以上”前面的字符(*是0或多个)
?     表示重复“0个或一个”前面的字符(.是有且只有1个)
|     表示同时过滤多个字符串
()      表示分组过滤,后向引用

原文地址:http://www.cnblogs.com/gengxiaonuo/p/16829373.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性