SED命令

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

sed命令:

      文本处理三剑客:

            grep;egrep;fgrep:文本过滤器

            sedStream  EDitor,流编辑器,行编辑器;

            awk:文本格式化工具,报告生成器

sed   [OPTION]… {script-only-if-no-other-script}[input-file]…

           地址定界编辑命令

    常用选项:

                    -n:不输出模式空间中的内容至屏幕;

                    -e script, –expression=script:多点编辑;

                    -f /PATH/TO/SED_SCRIPT_FILE

                    -r, –regexp-extended:支持使用扩展正则表达式:

                    -i [SUFFIX], –in-;lace[=SUFFIX]:直接编辑原文件;

 地址定界:

                   (1)不给地址:对全文进行处理;

              (2)单地址:

                    #:指定行

                    /pattern/:被此模式所匹配到的每一行

              (3)地址范围;

                    ##

                    #+#

                    #/patl/

                      /patl/,/pat2/,…

                    $: 最后一行

              (4)步进:~

                     1~2:所有奇数行

                     2~2:所有偶数行

编辑命令:

          d:删除

          p:显示模式空间中的内容

          a \text: 在行后面追加文本“text”,支持使用\n实现多行追加;

          i \text:在行前面插入文本“text”,支持使用\n实现多行插入;      

          c \text: 把匹配到的行替换为此处指定的文本“text”

         w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;

         r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;即文件合并;

        =:为模式匹配到的行打印行号;

       !:条件取反 地址定界!编辑命令;

s///:查找替换其分隔符可自行指定,常用的有s@@@,s###等;

            替换标记:

                g:全局替换

                w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中

                p:显示替换成功的行

高级编辑命令:

            h:把模式空间中的内容覆盖至保持空间中;

            H:把模式空间中的内容追加至保持空间中;

            g:把保持空间中的内容覆盖至模式空间中;

            G:把保持空间中的内容追加至模式空间中;

            x:把模式空间中的内容与保持空间中的内容互换;

            n:覆盖读取匹配到的行的下一行至模式空间中;

            N:追加读取匹配到的行的下一行至模式空间中;

            d:删除模式空间中的行;

            D:删除多行模式空间中的所有行;

 

           示例:

               sed -n ‘n;p’ FILE:显示偶数行;

               sed ‘1!G;h;$!d’ FILE:逆序显示文件内容;

               sed ‘$!d’ FILE:取出最后一行;

               sed  ‘$!N;$!D’ FILE:取出文件最后两行;

               sed ‘/^$/d;G’ FILE:删除原有的所有空白行,

而后为所有的非空白行后添加一个空白行;

               sed ‘n;d’ FILE:显示奇数行;

               sed ‘G’ FILE: 在原有的每行后方添加一个空白行;

基本sed编程举例:

          使用p(rint)显示行: sed -n ‘2p’  temp.txt   只显示第2,使用选项n

          打印范围:  sed -n ‘1,3p’  temp.txt         打印第1行到第3

          打印模式:  sed -n ‘/movie/’p  temp.txt     打印含movie的行

         使用模式和行号查询:  sed -n ‘3,/movie/’p  temp.txt   只在第3行查找movie并打印

         显示整个文件:  sed -n ‘1,$’p  temp.txt      $为最后一行

         任意字符:  sed -n ‘/.*ing/’p  temp.txt     注意是.*ing,而不是*ing

          打印行号:  sed -e ‘/music/=’  temp.txt

          附加文本:(创建sed脚本文件) chmod  u+x  script.sed, 运行时 ./script.sed  temp.txt

                 #!/bin/sed -f

                 /name1/ a/             #a/表示此处换行添加文本

                  HERE ADD NEW LINE.     #添加的文本内容

         插入文本: /name1/ a/ 改成 4 i/ 4表示行号,i插入

         修改文本: /name1/ a/ 改成 /name1/ c/ 将修改整行,c修改

         删除文本: sed ‘1d’ temp.txt  或者 sed ‘1,4d’ temp.txt

        替换文本: sed ‘s/source/OKSTR/’ temp.txt     source替换成OKSTR

                 sed ‘s//$//g’ temp.txt             将文本中所有的$符号全部删除

                 sed ‘s/source/OKSTR/w temp2.txt’ temp.txt 将替换后的记录写入文件temp2.txt

        替换修改字符串: sed ‘s/source/”ADD BEFORE” &/p’ temp.txt

               结果将在source字符串前面加上“ADD  BEFORE”,这里的&表示找到的source字符并保存

       sed结果写入到文件: sed ‘1,2 w temp2.txt ‘ temp.txt

                     sed ‘/name/ w temp2.txt’  temp.txt

        从文件中读文本: sed ‘/name/r temp2.txt’  temp.txt

        在每列最后加文本: sed ‘s/[0-9]*/& Pass/g’  temp.txt

        shellsed传值: echo  $NAME | sed “s/go/$REP/g”   注意需要使用双引号

快速一行命令:

         ‘s//.$//g’           删除以句点结尾行

         ‘-e /abcd/d’       删除包含abcd的行

         ‘s/[][][]*/[]/g’   删除一个以上空格,用一个空格代替

         ‘s/^[][]*//g’      删除行首空格

         ‘s//.[][]*/[]/g’   删除句号后跟两个或更多的空格,用一个空格代替

         ‘/^$/d’             删除空行

         ‘s/^.//g’            删除第一个字符,区别   ‘s//.//g’删除所有的句点

         ‘s/COL/(…/)//g’  删除紧跟COL的后三个字母

         ‘s/^////g’            删除路径中第一个/

 

原创文章,作者:MFX,如若转载,请注明出处:http://www.178linux.com/74549

(0)
MFXMFX
上一篇 2017-05-01 21:04
下一篇 2017-05-01 21:41

相关推荐

  • 硬软链接的区别 节点 以及重定向和管道

    INODE全称叫index node 表中包含文件系统所有文件列表   一个节点是在一个表项 包含有关文件的信息 ( 元数据 ) 包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数 1 文件引用一个是 inode号   2 我们是通过文件名…

    Linux干货 2016-08-12
  • dd命令详解及实战应用

    dd简述 dd在linux中是 一个强大的命令,常用于拷贝大量数据,测试读写效能 ,清空硬盘数据(慎用),不仅如此,由于dd 允许以二进制方式读写,所以特别适合在原始设备上输入、输出。 dd与cp的区别 这里有必要说明一下,两个命令都可用于拷贝,但是级别却完全不一样:cp是文件级别的读取方式,而dd更底层,可以数据块级别去读取硬盘,由此可看出在效率…

    Linux干货 2017-04-04
  • 关于大型网站技术演进的思考(六):存储的瓶颈(6)

    原文出处: 夏天的森林  在讲数据库水平拆分时候,我列出了水平拆分数据库需要解决的两个难题,它们分别是主键的设计问题和单表查询的问题,主键问题前文已经做了比较详细的讲述了,但是第二个问题我没有讲述,今天我将会讲讲如何解决数据表被垂直拆分后的单表查询问题。 要解决数据表被水平拆分后的单表查询问题,我们首先要回到问题的源头,我们为什么需要将数…

    2015-03-11
  • 软件包管理、自建yum源与LAMP架构的自动编译安装

    软件包管理 CentOS采用RedHat开发的rpm包管理器管理应用程序包。rpm包是由二进制可执行程序、库、配置文件、帮助文件等组成,支持安装、卸载、查询、升级、降级、校验等操作。 从组成结构上,rpm包由文件清单、安装和卸载时运行的脚本构成。 包管理器有其自带的公共数据库。其数据包括:程序包的名称、版本、依赖关系,功能说明,及各个文件的路径及校验码信息等…

    Linux干货 2016-12-05
  • N25-第六周作业

    第6周作业 — 请详细总结vim编辑器的使用并完成以下练习题 vim是模式化的全屏文本编辑器。vim分为三种模式:分别是编辑模式;输入模式;末行模式; 打开文件的方式有:vim +# FILE打开文件FILE并把光标定位到#行的行首;vim +/PATTERN FILE打开文件并让光标处于第一个被PATTERN匹配到的行的行首。(支持正则表达式)…

    Linux干货 2017-02-22
  • liunx学习第一天知识点-基础知识

    一 计算机组成 1. 冯·诺依曼体系:     1946年数学家冯·诺依曼于提出计算机由五大部分组成:运算器、控制器、存储器、输入设备、输出设备 2. 摩尔定律:     戈登·摩尔于1965年提出来当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,…

    Linux干货 2016-07-27