sed是Linux中用来处理文件的非交互式(和vim编辑器不一样)指令,他可以把获取的文件内容按照一定的要求过滤并且输出过滤后的结果到文件
主要作用是在输出内容时查找、新增、删除和修改替换
命令行常用的sed指令的结构:
- -i 表示直接在源文件中进行修改
- -n 表示只显示过滤后的内容
- -e 表示多重编辑,经常多个连续使用后面跟指令表示连续的处理动作
sed -[i/n/e] '<commands>' target_name
在文件中调用另一个包含sed指令的文件来使用sed指令时:
sed -[i/n/e] -f file target_name # file文件中记录了指令
连续使用多个sed命令时,可以使用分号从中间隔开 ;
sed '/root/p';sed 's/word$/aaa/g'
- sed命令和选项:
a\ 在当前行后添加一行或多行
c\ 用新文本替换当前行中的文本
d 删除行
i\ 在当前行之前插入文本
h 把模式空间的内容复制到暂存缓冲区
H 把模式空间的内容添加到缓冲区
g 取出暂存缓冲区的内容,将其复制到模式缓冲区
G 取出暂存缓冲区的内容,将其追加到模式缓冲区
l 列出非打印字符
p 打印行
n 读入下一行输入,并从下一条而不是第一条命令对其处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的行应用所有命令
s 用一个字符串替换另外一个字符串 - 替换标志:
g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区和模式空间的内容
y 将字符转换成另外一个字符
查找用法
- 根据关键词查找
ifconfig | sed -n '/key/p'
查找包含"key"的行,并且输出结果,p这个控制符表示显示输出
- 查找某一范围的多行
输出m到n行中的内容,p代表输出,经常和 -n 一起使用
-n 的含义是不显示原文内容,只显示过滤后的内容
sed -n 'm,np'
sed -n 'm,$p' # 过滤m行开始到结束的内容
使用举例:
ifconfig | grep inet | sed -n '1,2p'
输出:
inet 172.16.255.144 netmask 255.255.240.0 broadcast 172.16.255.255
inet 127.0.0.1 netmask 255.0.0.0
- 打印某一符合模式的行到某一符合模式的行之间的多行
sed -n '/abc/,/def/p' file # 打印包含abc的行到def的行之间的多行
sed -n '2/,/def/p' file # 打印第二行到包含def的行之间的多行
新增内容用法
- 在某行后面新增内容
在第5行后面增加一行,内容为string,a表示append即追加到尾部的含义
sed '5 a string' file
- 注意:这里新增的行是另起一行
- 在符合某模式的行后面新增内容
在包含abc的行后面增加一行,内容为def,a\表示追加,g表示对所有行都生效
sed '/abc/a\def/g' file
- 在某行前面新增内容
在第2行前面增加一行,内容为string\nstring1,i表示insert即插入的含义
sed '2 i string\nstring1' file
- 在符合某模式的行前面新增内容
sed '/abc/i\def/g' file
删除用法
- 删除某一行
sed '2 d' file # 删除第2行
sed '$ d' file # 删除最后一行
- 删除某包含模式的行
删除包含abc的行
sed '/abc/d' file
- 删除某一范围的行
sed '1,3 d' file # 删除1-3行
sed '/abc/,/def/d' file # 删除包含abc的行至包含def的行之间的内容
扫描二维码关注公众号,回复:
11206014 查看本文章
替换用法
替换用法的基本格式:
regex是正则表达式用来匹配内容,replacement是将匹配到的内容替换的内容,flags是控制符
sed -n 's/regex/replacement/flags' file
- 将内容替换为指定的内容
将所有的abc替换为admin,g代表对所有匹配到的内容都生效
sed -n 's/abc/admin/g' file
- 将内容替换为修改后的内容
将所有abc替换为abcdef,&用来引用匹配到的内容
sed -n 's/abc/&def/gp' file
- 更改s后的分隔符
跟在s后面的符号就是分隔符,下面使用的是#作为分隔符
sed -n 's#abc#def#gp' file
- 数据行的替换
将文本中某一行的内容替换为指定的内容
例如:将第二行的内容替换为string,c表示替换操作
sed '2 c string' file
其他用法
- 多重编辑 -e
使用-e来连接多个指令操作,先删除第1,2行,然后把所有abc替换为def
sed -e '1,2d' -e 's/abc/def/g' file
-e的另一种用法是直接跟一个多行指令,使用分号隔开
sed -e '1,2d;s/abc/def/g' file
- 文件操作
sed '/abc/r filename' file # 在包含abc的行后加入filename文件中的内容
sed '/abc/w filename' file # 在filename文件中写入包含abc的行
- 读取下一行
对符合条件的下一行进行操作
将包含abc的行的下一行中的123替换为def
sed '/abc/{n; s/123/def/}' file