Linux三剑客之sed命令

sed 是用于过滤和转换文本的流编辑器,功能很强大,以下可以从以下几个方面学习:

  • 命令格式
  • 内容查看
  • 内容替换
  • 内容增加
  • 内容删除

sed是行编辑工具,所以是以行为单位。

一、命令格式

1、格式说明

  • sed [参数] ‘<匹配条件> [动作]’ [文件名]

2、参数

  • 参数为空  表示sed的操作效果,实际上不对文件进行编辑
  • -n             取消静默输出
  • -i              表示对文本进行编辑

3、匹配条件

匹配条件分为两种,分别为:数字行号和关键字匹配

  • 数字行号格式 '行号'
  • 关键字匹配格式  '/关键字/'   其中'/'隔离符号可以根据情况替换为@、#、!

4、动作

  • a 在匹配到的内容下一行增加内容
  • i  在匹配到的内容当前行增加内容
  • d 删除匹配到的内容
  • s  替换匹配到的内容
  • p 查看指定内容

注意的是上面的动作应该在参数为-i的情况下使用,否则不会有效果。

二、实例说明

1、内容查看

  • 文本内容
[root@localhost thrid_dir]# cat sed_example.txt 
aa AA
aa BB
cc CC
  • 文本查看
# 不加-n会将内容先全部输出,然后再输出查找出来的内容
[root@localhost thrid_dir]# sed '3p' sed_example.txt 
aa AA
aa BB
cc CC
cc CC

# 加上-n取消静默输出,只输出匹配的内容
[root@localhost thrid_dir]# sed -n '3p' sed_example.txt 
cc CC
# 输出2、3两行
[root@localhost thrid_dir]# sed -n '2,3p' sed_example.txt 
aa BB
cc CC

2、内容替换

从三个方面说明:行号、列号、全体。

命令格式:

  • sed -i [替换格式] [文件名]

 其中替换格式的写法:'s###'--->'s#原内容##'--->'s#原内容#替换后内容#'

参考样式:

  • sed -i '行号s#原内容#替换后内容#列号' [文件名]
  • sed -i 's#原内容#替换后内容#g' [文件内容]
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
aa BB
cc CC

# 整个文档替换
[root@localhost thrid_dir]# sed -i 's#aa#AA#' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
AA AA
AA BB
cc CC

# 替换指定的行列
[root@localhost thrid_dir]# sed -i '1s#AA#aa#1' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
AA BB
cc CC

3、内容增加

在指定行号的下一行增加内容,其格式如下:

  • sed -i '行号a增加内容' [文件名]

当然,也可以在当前行增加内容,其格式如下:

  • sed -i '行号i增加内容' [文件名]

如果增加多行,可以在行号位置写上范围值,中间以逗号隔开,如:sed -i '1,3a增加内容' [文件名]

# 原始文件
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
aa BB
cc CC

# 第3行后增加内容
[root@localhost thrid_dir]# sed -i '3add DD' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
aa BB
cc CC
dd DD

# 1-3每一行后增加内容
[root@localhost thrid_dir]# sed -i '1,3aadd test' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
add test
aa BB
add test
cc CC
add test
dd DD

# 正则匹配内容aa行后增加内容
[root@localhost thrid_dir]# sed -i '/aa/aadd test1' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
add test1
add test
aa BB
add test1
add test
cc CC
add test
dd DD

# 第一行前增加内容,其余的返回以及正则与上面等同
[root@localhost thrid_dir]# sed -i '1iadd before' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
add before
aa AA
add test1
add test
aa BB
add test1
add test
cc CC
add test
dd DD

4、内容删除

指定行号进行删除,其格式如下:

  • sed -i '行号d' [文件名]

如果多行范围删除,可以使用多行,中间以逗号隔开。

#文件内容
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
aa BB
cc CC
dd DD
ee EE
ff FF

#删除第3行
[root@localhost thrid_dir]# sed -i '3d' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
aa AA
aa BB
dd DD
ee EE
ff FF

#正则匹配行删除
[root@localhost thrid_dir]# sed -i '/aa/d' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
dd DD
ee EE
ff FF

#范围行删除
[root@localhost thrid_dir]# sed -i '1,2d' sed_example.txt
[root@localhost thrid_dir]# cat sed_example.txt
ff FF
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/shenjianping/p/14392139.html