linux三剑客之sed
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法格式
sed [参数] [处理规则] 文件名
参数说明
-n :只有经过sed特殊处理的内容才会被显示出来
-e :可以进行多项编辑
-f :直接将sed的动作写入一个脚本内,使用-f filename 运行该脚本
-r :拓展正则
-i :修改文件的内容并保存
动作说明
a :a的后面可以接字符串,在当前行后增加一行或者多行
i :i的后面可以接字符串,在当前行前增加一行或者多行(单独使用)
c:c的后面可以接字符串,替换当前行或者多行
p :打印满足条件的内容,一般与参数-n搭配使用
d:删除内容,直接在d前面添加行数选择想要删除的行数
s:替换字符串,默认情况下一行只替换一次
g:全部执行,搭配动作s使用,可以将内容里每一行的所有内容替换
&:代表前面命令匹配到的内容
i:搭配s使用时,是忽略大小写的含义
实际操作
以行为单位的新增/删除
将1.txt文件内内容2-5行删除
sed的动作就是'2,5d',d就是删除动作,2,5就是2到5行,所以显示的数据就没有2,5行的数据
在1.txt文件内容中第二行后添加66
sed的动作就是'2a66',a就是在第二行后增加新的一行66,66直接写在a后面即可
同样的i就是在第二行前添加新的一行66,s就是将当前行替换成66
如果想要增加多行,可以增加一个\n换行符即可
以行为单位的替换
将1.txt文件内2-5行的内容替换成1
sed的动作就是'2,5c1',将2到5行的内容替换成了一个1
多点编辑与查找替换
使用一条sed命令,删除33的内容,并把22修改成1
使用sed -e可以一次性多点编辑,一边使用动作d删除33,然后使用动作s与g将文本内容中的22替换成1即可
将/etc/passwd中的root修改成Root
如果想要永久修改,可以加上参数 -i,就会将文件里的内容修改掉了