sed
概念:流编辑器。
在命令行基本格式:
①sed [options] ‘command’ file1 file2 …….
②sed [options] -f scriptfile file1 file2 ……
sed处理的文件,既可以由命令行输入,如①。也可以编写一个脚本文件,用-f指定脚本文件。如②。
command:编辑命令格式为/pattern/action
其中pattern是正则表达式,action是编辑操作。
sed一行为基本单位,如果哪行与pattern匹配,则执行相应的action。如果没有pattern,则对要处理的文件每一行都执行action。
sed默认遵守Basic规范基本匹配
选项:
-i:将sed的结果修改源文件。(sed只是会将处理结果显示到显示器上,一般不会影响源文件。)
-n : 打印出匹配的。与后面的p命令结合使用。(sed一般会将文件内容及处理结果都打印出来。)
-e : 一次处理多个/pattren/action.
命令:
/pattern/p : 打印pattern匹配的行。
要想输出处理结果,需要加上-n选项。
/pattern/d:删除pattern匹配的行。会将文件剩余内容显示出来
/pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配的pattern1替换为pattern2
/pattern/s/pattern1/pattern2/g:查找符合pattern的行,将改行所有匹配的pattern1替换为pattern2
pattern2中若有和pattern1中相同的字符串,可用&代替。
定址:决定对哪些行进行编辑。地址的形式可以是数字,正则表达式或二者的结合。若没有指定地址,sed会处理文件的所有行。
地址用,隔开,表示范围
比如说打印第二行到第三行的内容
sed中的缓冲区
sed在处理每行数据时,现将改行数据存到缓冲区里。分为以下两个缓冲区,分别叫做保持空间和模式空间。
模式空间:进行正则匹配和处理数据,相当与一家工厂中的流水线。
保持空间:暂时存储数据,相当于一家工厂的仓库。
说明:
①一般情况下,只使用模式空间。
②处理数据在模式空间中,存储在保空间中
③显示使用下列命令,可以使用保持空间
g:将保持空间的内容拷贝到模式空间,原来模式空间的内容会清掉
G:将保持空间的内容拷贝到模式空间,追加在原来模式空间内容\n后
h:将模式空间的内容拷贝到保持空间,原来保持空间的内容会清掉
H:将模式空间的内容拷贝到保持空间,追加在原来保持空间内容\n后面
n:将下一行添加到模式空间里,原来模式空间的内容清空
N:将下一行添加到模式空间里,追加在原来模式空间的内容\n后
x:将保持空间和模式空间的内容交换
d:删除所有行,并读入下一行到模式空间
D:删除第一行
虽然保持空间不经常用,但是有时会带来很好的效果
举几个例子:
1、输出1+2+3+。。。+100
seq 100 : 输出1到100的数字,中间以\n隔开
sed ‘:a;N;s/\n/+/g;{$!ba}’ 设置标签a,N将下一行内容追加到模式空间,将\n 替换为+,如果不是(!)最后一行($),就跳(b)到a标签处,继续执行。
sed 命令多时用分号(;) 隔开
2、添加空行
G因为保持空间是空的,所以每次以追加方式将空的拷贝到模式空间内容\n后,就会有一行空的
3、模拟tac的功能(逆序打印)
tac
用sed实现
4.将文件中匹配的行添加到文件的结尾
5.交换行列