zoukankan      html  css  js  c++  java
  • 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    科技巨头争抢的“超级账本”,到底是个什么组织?
    区块链结合教育,将给教育行业带来哪些变革?
    国家区块链战略开启,教育行业应对几何?
    区块链如何改变教育
    区块链技术在教育领域的应用模式与现实挑战
    知乎-区块链技术运用于教育有多少种可能?
    区块链+教育,让教育行业充满希望
    教育区块链应用案例【2019】
    区块链在教育行业的落地应用现状介绍
    PowerShell 搜索文件编码格式
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14392139.html
Copyright © 2011-2022 走看看