一.概述
1.sed本身就是一个管道命令,可以分析standard input的,而且sed可以将数据进行替换,删除,新增,选取特定行等的功能。
二.使用
1.sed [-nefr] [动作] sed
参数:
-n:安静模式,只有经过sed特殊处理的才会被列出来;
-e:在同一行执行多条命令;
-f:将sed的动作写在一个文件中,-f file_name可以执行file_name中的sed动作;
-r:sed的动作支持扩展型正则表达式;
-i:直接修改读取的文件内容;
动作:
可使用数字寻址方式,n1,n2 [动作]
也可使用文本模式过滤器:/pattern/command
p:打印;
a:新增行,在指定行的下一行;
c:替换,替换指定范围内的行;
d:删除指定的行;
i:插入行,在指定行的上一行;
s:替换字符串,如:n1,n2/s/old/new/g,将字符串old全都替换成new;
y:将字符一一替换,如/pattern/abc/xyz/g,将字符abc分别全部替换成xyz;
替换标记
数字:标明替换第几处匹配的地方;
g:全部替换;
p:替换前的内容要打印出来;
w file:将替换结果写入文件;
三.高级用法
1.特殊参数
1)N:将数据流的下一行加进来创建一个多行组来处理;
2)D:删除多行组中的一行;
3)P:打印多行组中的一行;
2.保持空间,模式空间
模式空间:是一块活动缓冲区,在sed编辑器执行时它会保存sed编辑器要校验的文本;
保持空间:sed编辑器的另一块缓冲区间;
1)h:将模式空间复制到保持空间;
2)H:将模式空间附加到保持空间;
3)g:将保持空间复制到模式空间;
4)G:将保持空间附加到模式空间;
5)x:交换保持空间和模式空间的内容;
例子:
[root@localhost]# cat data
This is the header line
This is the first line
This is the second line
This is the last line
[root@localhost]# sed -n '/first/{ =======================>使用正则表达式过滤出含有first的行
> h =======================>使用h命令将该行放到保持空间
> p =======================>打印模式空间的内容
> n =======================>n命令提取数据流中下一行的内容,放入模式空间
> p =======================>打印模式空间的内容
> g =======================>g命令将保持空间的内容放回模式空间,替换当前文本
> p =======================>打印模式空间的内容
> }' data
This is the first line
This is the second line
This is the first line
3.排除命令
使用!用来排除,如sed -n '/pattern/p' file可以打印匹配pattern的行,sed -n '/pattern/!p' file就可以打印不匹配pattern的行;
本文参考:
鸟哥的Linux私房菜基础学习篇(第三版),Linux命令行与shell脚本编程大全(第2版)。