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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    SAE J2534介绍
    低价替代Vector CANoe CAN总线适配解决方案支持所有USBCAN(周立功CAN、PCAN、Kvaser、ValueCAN、NI CAN)
    位运算学习
    [C#] 利用方向鍵移動 TextBox Focus
    CANoe 入门 Step by step系列(二)CAPL编程【转】
    CANoe 入门 Step by step系列(三)简单例子的剖析【转】
    ios7适配一些问题以及64位32位
    iOS项目中的version和build
    you don't have permission to view it 解决
    iOS 学习资料整理
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14392139.html
Copyright © 2011-2022 走看看