一、sed基本概念  

     sed,流式编辑器 ,即把前一个程序输出引入到sed的输入,经过一系列编辑命令转换为另一种格式输出。默认使用Basic正则表达式规范,如若加 -r 选项则用Extended规范。

     在Basic规范中,+、?、{ }、() 、| 均表示普通含义,如果要使用其特殊含义,需使用 \ 转义,在Extended规范中则相反。

     sed在处理一行内容时,把当前处理的航存在临时缓冲区中(内存),称为模式空间,接着用sed命令处理模式空间的内容,处理完成后,把内容送往屏幕(但在某些时候,可以使用保持空间来暂存数据),接着不断重复处理下一行,直到文件结束。


二、sed基本使用

(1)/pattern/p:打印匹配的行

spacer.gifwKiom1d1DjKTnNteAAAzMhGYMW0217.png


(2)/pattern/d:删除匹配到的行

spacer.gifwKiom1d1DlKRc7nGAABd8CL5Gb4632.png

注:sed命令不会修改原文件,只是表示某些行不打印输出,如果加 -i 选项就会修改原文件

wKiom1d1EUCjQP4dAAAm4RGe5IY843.png


(3)/pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行的第一个匹配pattern1的字符串替换为pattern2

spacer.gifwKiom1d1DoeiAYN3AABeRadS6wU868.png


(4)/pattern/s/pattern1/pattern2/g:查找符合pattern的行,将每行匹配pattern1的字符串替换为pattern2

wKioL1d1DqyjCBNNAABf8mC2cVY636.png

wKioL1d1Dqyy_KZ6AAAuQjybb-w494.png


(5)定址

wKiom1d1DuyyKi06AABnAXbNESA067.png

wKioL1d1Du2ha8tVAAAvhyIMqp8368.png

spacer.gif

三、正则表达式

(1)^:行首定位符

spacer.gifwKioL1d1DwyBZniMAAA-LCldh2g152.png


(2)$:行尾定位符

spacer.gifwKiom1d1DyaRz48uAAAZOTb5Kpo736.png


(3).:匹配除换行符以外的单个字符

spacer.gifwKioL1d1Dz-gpufcAAA29tK8_GI583.png


(4)*:匹配零个或多个前导单元

spacer.gifwKiom1d1D1uR_yPtAABH42SVO2E635.png


(5)[ ]:匹配指定字符组内任一字符

spacer.gifwKioL1d1D4TS8O66AAAug_mYggw036.png


(6)[^]:匹配不在指定字符组内的任一字符

spacer.gifwKiom1d1D5bzwucOAAAt8kYCuU4118.png


(7)():保存已匹配的字符,保存为标签1,可以使用 \1 来引用

spacer.gifwKioL1d1ER2yYzg1AAA4ZYZ7Mrs560.png


(8)&:保存查找的串,以便在替换串中引用

spacer.gifwKioL1d1EIuzwCFCAAA0MlimqOk105.png


(9)\<:词首定位符

spacer.gifwKiom1d1EKmxkM5pAAAw16X3N7U198.png


(10)\>:词尾定位符

spacer.gifwKioL1d1EL2xCrZKAAAx1_BH-ms843.png


(11)v\{m\}:连续m个v

          v\{m,\}:至少m个v

spacer.gifwKiom1d1EM_hO5xwAABMewA9o5w022.png


四、sed命令

g:将保持空间的内容拷贝到模式空间中

G:将保持空间的内容追加到模式空间中

h:将模式空间的内容拷贝到保持空间中

H:将模式空间的内容追加到保持空间中

d:删除模式空间中的第一行,并读入下一行

D:删除模式空间中的第一行,不读入下一行

x:交换模式空间和保持空间的内容


五、sed练习题

(1)给每一行结尾添加一行空行

spacer.gifwKioL1d1D-LA4-BbAAA5NYVGZkw865.png


(2)用sed模拟tac(倒序输出)

spacer.gifwKiom1d1D_GRWRgGAABMwoezQo4377.png


(3)追加匹配行到文件结尾

spacer.gifwKiom1d1EAHz6fvtAABFwxnTCMc368.png


(4)行列转换

spacer.gifwKioL1d1EA-zqgAJAABCwjM1_DA772.png


(5)1+...+100

spacer.gifwKiom1d1EB3zlfugAABWGrpR2jg563.png


(6)输出奇数偶数行

spacer.gifwKioL1d1EC7S2L2GAABamn9lCEg890.png


(7)1+...+100(标签方法)

spacer.gifwKiom1d1EDzRc_OQAABWqXws16M483.png

注::a表示标签a,ba表示跳转到标签a,$!ba表示最后一行不用跳转到标签a。