文本处理三剑客之sed及vi编辑使用

作用:

      sed是Linux系统文本处理工具中的三剑客之一,它是一种流编辑器,以行为单位,能够使用正则表达式;跟其他文本处理工具模式相同,不对原文件直接操作,而是先借用一个临 时的数据缓冲区存放文文本数据,同时还有一个自己独特的空间"pattern space",我们称之为sed的模式空间,它的处理流程是:

           (1)首先是逐行读取文本,放到模式空间中;

           (2)判断模式空间是否被sed模式匹配到到:

           (3)如果能够被sed模式匹配到要执行sed编辑命令,默认把结果输出到标准输出(stdout);

           (4)如果不能够被sed模式匹配到,默认也把没有匹配到的内容输出到stdout;

           (5)同时如果不执行-d命令删除模式空间中的内容时,默认会把模式空间中的内容输出到stdout

语法格式:

         sed [options]…'script' [input-file]…

            script:是sed模式匹配条件,也叫sed脚本,由地址定界和编辑命令组成; 

                 (1)地址定界:指的是要操作的文本行范围;

                 (2)编辑命令:指的是要对匹配到的文本范围执行什么样编辑命令;

常见选项:[option


         -n :不输出模式空间的内容到stdout;sed默认是要把模式空间中的内容输出到stdut;

         -e 'script' :可以指定多个匹配模式条件,实现多点编辑;

         -f script-file :可以把匹配模式条件写到文件中,直接引用文件读取;

         -r :支持使用扩展正则表达式,模式使用基本正则表达式;

         -i :直接对原文件执行编辑修改,操作非常危险,可以-i.bak,可以同时先备份以原文件跟.bak结尾的文件;

      

地址定界分类:

       

          (1)空地址:

      

             以全文匹配处理;

          (2)单地址:

         

             # :指定行号;

      

             /pattern/ :被模式匹配到的所有行;

          (3)范围地址:

             #,#         :指定以前一个#开头的行到后一个以#结束的行所有行;

               

             #,+#       :指定以第#开始的行在跟#个行,5,+5:表示从第五行开始在跟5行,总共匹配 11 行,包括指定开始的行;

      

            #,/pattern/ :指定从#开头,到第一个被/pattern/匹配到的中间所有行;

     

            /pattern1/,/pattern2/ :从第一个被/pattern1/匹配到的行开始到第一被/pattern2/匹配到的行结束中间的所有行;

          (4)步进地址:

       

             1~2:指定所有奇数行;

             2-2:指定所有偶数行;

          

编辑命令:

       

          d :删除地址定界指定的行

          p :打印模式空间中的行输出到stdout;一般结合选项-n,效果看起来有变化;

          a\string :在匹配到的地址定界行下面添加string内容,内容中使用"\n",可以实现换行;

          i\string :在匹配到的地址定界行上面添加string内容,使用"\n"实现换行;

          c\string :把匹配到的地址定界行替换成新行string内容;

          s///或者s@@@ :在指定的地址定界中搜索指定字符并替换;其中替换标记如下

            

                g:行内全局替换;

                w /path/file :将替换成功的结果保存至指定文件中;

                p:显示替换成功的行;

         r /path/file :读入其他文件的行到指定的地址定界中;

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

        

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

        

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

sed高级使用:sed除了有一个模式空间以外,还有一个空间叫hold space保持空间;通过命令实现模式空间与保持空间中的行来回操作,达到特定编辑功能;

sed高级编辑命令:

        

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

        

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

     

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

    

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

        x :两个空间内容置换;

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

   

        N :读取匹配到的行的下一行追加到模式空间中;匹配到行不会被覆盖;

   

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

      

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

vi编辑器:

      它是一款强大的文本编辑工具,用在命令行模式下,其中vim是vi的升级版本,功能更加完善,其中的对系统配置定义的语法高亮检查很是实用;熟练掌握使用后,对系统管理维护工作中对文本的操作效率非常高,所有平时要注意多练习,而且vimtutor命令可以引导练习在里面操作;

   

 1.vi模式:

       编辑器也跟其他模式化文本处理工具一样,不是直接对原文件进行修改操作,先把文本数据读取到自己的vi工作空间中;其实vi有三个模式,不同模式实现的功能不同;下面介      绍:

        

        (1)编辑模式:默认打开文件后进入编辑模式,在这里可以实现复制删除替换查找等命令;      

            (2)输入模式:在这里可以直接对文本进行编辑写等操作;

        (3)末行模式:在这里可以使用末行模式命令对文本进去处理操作;

 2.vi模式切换:

        (1)编辑模式–>输入模式

           i:在当前光标所在字符的前面转换为输入模式;

           I:在当前光标所在行的行首转换为输入模式;

           a:在当前光标所在字符的后面转换为输入模式;

           A:在当前光标所在行的行尾转换为输入模式;

           o:在当前光标所在行的下方插入一个新行转换为输入模式;

           O:在当前光标所在行的上方插入一个新行转换为输入模式;

        (2)输入模式–>编辑模式

            ESC按键;

        (3)编辑模式–>末行模式

           输入冒号:

        (4)末行模式–>编辑模式

           ESC按键,快速切换可以按两下ESC按键;

3.打开文件:

        语法格式 

           vim [options] [file ..]

        vi + :打开定位文件最后一行

        vi +[num] :打开文件定位到指定行

        vi +/pattern :打开文件定位到第一次被模式匹配到的行;

       

        file:注意如果实现没有这个文件,就创建这个文件为新文件,不能跟目录同名;

4.关闭文件:

        (1)末行模式关闭文件

           :q 退出

           :q! 强制退出不保存;

           :w 保存;

           :w! 强制保存;

           :wq 保存并退出;

           :x 保存并退出;

        (2)编辑模式下退出

           ZZ 保存并退出;

5.在编辑模式中移动光标:

        (1)逐字符移动:

           h <– 向左

           l –> 向右

           j  v  向上

           k  ^  向下

           注意:可以[num]h,l,j,k,指定移动多少个字符;

             ^

             k              

       < h       l >               

             j                     

             v

        (2)以单词为单位移动

            w: 移至下一个单词的词首

            e: 跳至当前或下一个单词的词尾

            b: 跳至当前或前一个单词的词首

           注意:可以[num]w,e,b,跟移动多少个单词

 

       (3)行内跳转:

            0: 绝对行首

            ^: 行首的第一个非空白字符

            $: 绝对行尾

       (4)行间跳转

            gg:跳至第一行;

            G:跳至最后一行;

            [num]G:跳至指定行;

           

        (5)末行模式 [num] 直接给定行号

          

        (6)在编辑模式下翻屏

            Ctrl+f: 向下翻一屏

            Ctrl+d: 向下翻半屏

            Ctrl+b: 向上翻一屏

            Ctrl+u: 向上翻半屏

6.编辑模式下删除

        (1)删除单个字符;

             x:删除光标所在处的单个字符;

            [num]x:指定向光标所在到向后的指定个字符;

        (2)删除命令d

            dd:删除当前光标所在整行

            d0:删除当前光标其前到当前行首的所有字符;

            d$:删除当前光标其后到当前行尾的所有字符;

            dw:删除当前光标所在的单词;

            [num]dw:删除当前光标向后的指定单词个数;

            de:删除当前光标所在的单词包括所在其后的单词; 

            [num]de:删除当前光标所在的单词包括其后指定单词的个数;

            db:删除当前光标所在其前的单词;

            [num]db:删除当前光标其前指定的单词个数;

7.末行模式删除操作:

        :startADD,endADDd

          . 表示当前行

          $ 表示最后一行;

          +[num] 表示从当前向下指定的行数;

8.编辑模式下黏贴命令p

       p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,

          则粘贴至光标所在字符的后面;

       P: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,

          则粘贴至光标所在字符的前面; 

        

9.编辑模式下复制命令y

            yy:复制当前光标所在整行

            y0:复制当前光标其前到当前行首的所有字符;

            y$:复制当前光标其后到当前行尾的所有字符;

            yw:复制当前光标所在的单词;

            [num]yw:复制当前光标向后的指定单词个数;

            ye:复制当前光标所在的单词包括所在其后的单词; 

            [num]ye:复制当前光标所在的单词包括其后指定单词的个数;

            yb:复制当前光标所在其前的单词;

            [num]yb:复制当前光标其前指定的单词个数;

       

10.编辑模式下修改命令c:先删除内容,再转换为输入模式

            cc:删除当前光标所在整行;进入输入模式

            c0:删除当前光标其前到当前行首的所有字符;进入输入模式

            c$:删除当前光标其后到当前行尾的所有字符;进入输入模式

            cw:删除当前光标所在的单词;进入输入模式

            [num]cw:删除当前光标向后的指定单词个数;进入输入模式

            ce:删除当前光标所在的单词包括所在其后的单词;进入输入模式 

            [num]ce:删除当前光标所在的单词包括其后指定单词的个数;进入输入模式

            cb:删除当前光标所在其前的单词;进入输入模式

            [num]cb:删除当前光标其前指定的单词个数;进入输入模式    

    

11.编辑模式下替换命令r

            r:替换单个字符;    

            R:替换单个单词替换后进入输入模式

12.编辑模式下撤销命令u

            u:撤销前一次编辑操作;

            连续uu可撤销此前多次编辑操作

            #u:撤销最近#次编辑操作;

13.编辑模式下重复前一次操作命令.

        . 重复前一次编辑操作;

14.可视化光标选取模式:

            v:逐字符选取;

            V:矩形选取;

15.末行式下查找

            /pattern 从当前光标所在处向下查找

                n 对查找到的内容向下跳转

                N 对查找到的内荣向上跳转;

            ?pattern  从当前光标所在处向上查找;

                N 对查找到的内容向下跳转

                n 对查找到的内荣向上跳转; 

  

16.查找并替换在末行模式下使用s命令

            ADDR1,ADDR2s@PATTERN@string@gi

            $:最后一行

            %:表示全文             

           .:表示当前行

           $:表示最后一行;

            #:指定行

            +[num] 表示从当前向下指定的行数;

            

            修饰符;

            g:全局替换

            i:忽略大小写; 

   

17.使用vim编辑多个文件

           vim FILE1 FILE2 FILE3

           :next 切换至下一个文件

           :prev 切换至前一个文件

           :last 切换至最后一个文件

           :first 切换至第一个文件

           :qa 部退出

18.屏显拆分

           Ctrl+w, s: 水平拆分窗口

           Ctrl+w, v: 垂直拆分窗口

           在窗口间切换光标:

           Ctrl+w, hljk

           :qa 关闭所有窗口

19.分窗口编辑多个文件

          vim -o : 水平分割显示

          vim -O : 垂直分割显示

20.末行模式下使用w命令:

        将当前文件中部分内容另存为另外一个文件;

       :w

       :ADDR1,ADDR2w /path/to/somewhere

21.末行模式下使用r命令:

        将另外一个文件的内容填充在当前文件中

        :r /path/to/somefile

22.跟shell交互

        :! COMMAND

23.高级功能

        1、显示或取消显示行号

           显示:set nu

           取消:set nonu

        2.显示忽略或区分字符大小写

           显示:set ignorecase

           取消:set noic

 

        3.设定自动缩进

           开启:set autoindent

               :set ai

           关闭:set noai

   

        4.查找到的文本高亮显示或取消

           显示:set hlsearch

           取消:set nohlsearch

        5.语法高亮

           显示:syntax on

           关闭:syntax off

24.配置文件

        /etc/vimrc:定义全局配置文件,对所有用户生效;

        ~/.vimrc :定义用户个人配置文件,只对单用户生效; 

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

(0)
xiashixiangxiashixiang
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相关推荐

  • iptables初探

    iptables 简述 基础知识 命令使用 简述 iptables是什么?netfilter又是什么? iptables是位于用户控件的一个防火墙规则控制管理工具。netfilter是位于内核中的真正的防火墙,由五个钩子函数(hooks)而组成。 iptables的作用是什么? 用来添加,删除,管理netfilter规则。 netfilter的作用是什么? …

    2016-05-31
  • 2016/08/07:文本处理工具及正则表达式

      在本次课程中,本以为和前面的内容难度差不多,内心毫无提防,但在做随堂练习的时候,被惨虐,不由得使我想起了高三时候拿到一张数学单元练习题,一道题也不会做的那种感觉,无助,彷徨,不甘。到了晚上总结了一下,还是有缘由可寻的。直接原因就是前面知识记得不牢固,也并未完全理解是和意思,尤其是tr命令,适用于何处,没按照5W1H方法来进行总结学习,导致应用的…

    Linux干货 2016-08-07
  • N26-第二周博客作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。    查看类    pwd : print name of current/working directory  打印当前工作目录;        &n…

    Linux干货 2017-02-17
  • HA cluster原理

    HA cluster 一、什么是高可用集群   高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务一直在线。在这个过程中,对于客户端来说是透明的。 …

    2016-11-27
  • Tomcat基于MSM+Memcached实现Session共享

    前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享。 相关介绍 MSM MSM–Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信…

    Linux干货 2015-07-03
  • 8.网络基础知识

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:网桥就是把2个不同的网段桥接起来;可隔离冲突域。 集线器:集线器就是把多根以太网线或光纤集合连接在同一段物理介质下的装置;工作在物理层;不能隔离冲突域。 二层交换机:工作于OSI模型的第2层(数据链路层),故而称为二层交换机。二层交换技术的发展已经比较成熟,二层交换机属数据…

    Linux干货 2017-08-21