zoukankan      html  css  js  c++  java
  • sed的基础操作

                  sed

    一、sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    二、sed命令格式

      sed [options] 'command' file

      sed [选项] ‘条件’ 文件路径

    三、sed的增删改查

      环境

    cat >> test.txt <<EOF
    01 oldboy CEO
    02 Alex   CEO02
    03 oldgirl CEO small wife
    EOF

    sed的选项

    a 在当前行下面插入文本。
    i 在当前行上面插入文本。
    c 把选定的行改为新的文本。
    d 删除,删除选择的行。
    D 删除模板块的第一行。
    s 替换指定字符
    n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
    r file 从file中读行。
    ! 取反 
    = 打印当前行号码。  

    查:

    查看单行

    [root@timo ~]# sed -n '1p' test.txt 

    01 oldboy CEO

    查看多行

    [root@timo ~]# sed -n '1,2p' test.txt 

    01 oldboy CEO

    02 Alex   CEO02

    查询连续的内容(查询内容包括oldboy 以及 oldfirl 中间的所有内容 连续的)

    [root@timo ~]# sed -n '/oldboy/,/oldgirl/p' test.txt 

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

     

    查询不连续的内容

    [root@timo ~]# sed -n '/oldboy/p;/oldgirl/p' test.txt 

    01 oldboy CEO

    03 oldgirl CEO small wife

    查看以03开头的

    [root@timo ~]# sed -n '/^03/p' test.txt 

    03 oldgirl CEO small wife

    查看以O结尾的                                                                                                     

    [root@timo ~]# sed -n '/O$/p' test.txt 

    01 oldboy CEO

    正则查询(-r 支持拓展正则)

    [root@timo ~]# sed -rn '/[d]/p' test.txt 

    01 oldboy CEO

    03 oldgirl CEO small wife

    增:

    在第二行下插入

    [root@timo ~]# sed '2a 022 wsir DSB' test.txt 

    01 oldboy CEO

    02 Alex   CEO02

    022 wsir DSB

    03 oldgirl CEO small wife

    在第二行上插入

    [root@timo ~]# sed '2i 022 wsir DSB' test.txt 

    01 oldboy CEO

    022 wsir DSB

    02 Alex   CEO02

    03 oldgirl CEO small wife

    在最后一行插入

    [root@timo ~]# sed '$a 022 wsir DSB' test.txt 

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    022 wsir DSB

    在多行下插入

    [root@timo ~]# sed '1,3a **********' test.txt 

    01 oldboy CEO

    **********

    02 Alex   CEO02

    **********

    03 oldgirl CEO small wife

    **********

    删:

    删除单行

    [root@timo ~]# sed '1d' test.txt 

    02 Alex   CEO02

    03 oldgirl CEO small wife

    删除多行

    [root@timo ~]# sed '1,2d' test.txt 

    03 oldgirl CEO small wife

    根据内容删除

    [root@timo ~]# sed '/Alex/d' test.txt 

    01 oldboy CEO

    03 oldgirl CEO small wife

    [root@timo ~]# sed '/old/d' test.txt 

    02 Alex   CEO02

    根据多个内容进行删除

    sed -i '1i 00 wsir XXX' test.txt 

    增加一条记录 -i 进行保存

    [root@timo ~]# sed -r '/Alex|wsir/d' test.txt 

    01 oldboy CEO

    03 oldgirl CEO small wife

    取反!

    添加空行 用\表示空行

    [root@timo ~]# sed -i '1a  \' test.txt 

    查询不是空行的内容

    [root@timo ~]# sed -n '/^$/!p' test.txt 

    00 wsir XXX

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    对比 查询空行(=表示查询内容所在行号

    [root@timo ~]# sed -n '/^$/=' test.txt 

    2

    [root@timo ~]# sed -n '/^$/p' test.txt 

     

    工作中经常用到删除空行

    [root@timo ~]# sed '/^$/d' test.txt

    00 wsir XXX

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    改:

    对一个字段进行替换 sed 's#原数据#替换数据#g' file

    [root@timo ~]# sed 's#Alex#xxx#' test.txt 

    00 wsir XXX

     

    01 oldboy CEO

    02 xxx   CEO02

    03 oldgirl CEO small wife

    对一行进行替换

    [root@timo ~]# sed -e '1c xxxx' test.txt 

    xxxx

     

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    正则匹配替换

    [root@timo ~]# sed -r 's#([0-9]{2})#xxx#' test.txt 

    xxx wsir XXX

     

    xxx oldboy CEO

    xxx Alex   CEO02

    xxx oldgirl CEO small wife

    注意事项:

    工作中-i进行更改时可与.aki同时使用避免误操作导致无法复原

    [root@timo ~]# sed -i.bak '1a ******' test.txt 

    [root@timo ~]# ls

    test.txt

    test.txt.bak

    [root@timo ~]# cat test.txt

    00 wsir XXX

    ******

     

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    [root@timo ~]# cat test.txt.bak 

    00 wsir XXX

     

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    [root@timo ~]# 

    -i与-n不能同时使用 使用会造成文件内容只剩下你修改的那一行

    测试时-in无问题正常 -ni时 效果如下,为避免损失请勿同时使用

    [root@timo ~]# cat test.txt

    01 oldboy CEO

    02 Alex   CEO02

    03 oldgirl CEO small wife

    [root@timo ~]# sed -ni 's#Alex#XXX#' test.txt

    [root@timo ~]# cat test.txt

    [root@timo ~]# 

    [root@timo ~]# 

  • 相关阅读:
    Linux下安装memcached
    Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference
    EmbossMaskFilter BlurMaskFilter 学习
    Canvas裁剪和Region、RegionIterator
    (转载)ANDROID STRINGS.XML 中的特殊字符转义
    给RelativeLayout设置背景,无效果bug解决
    Intent Flag实际项目 -- 超时跳转登录界面并清理前面所有activity
    第十章 移动端项目组管理
    第九章 竞品技术分析
    第四章 android 命名规范和编码规范
  • 原文地址:https://www.cnblogs.com/qiang-qiang/p/10306180.html
Copyright © 2011-2022 走看看