8-8 处理文本工具sed及vim文本编辑工具

处理文本工具sed及vim文本编辑工具

Sed:

  sed是一种在线编辑器、行编辑器,一次处理一行内容。在处理时,把当前处理的行存储在临时缓冲区中,该缓冲区称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着处理下一行,重复完成相同的操作,直到文件末尾;sed处理的整个过程中,对象文件中的内容没有被改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作过程。

   功能:数据的替换、删除、新增等,这里的数据可以是一些关键字,也可以是一些特定的行。

语法结构:

   sed [OPTION]…{script}[input-file]…[actions]

      -n:静默模式

      -e:多点编辑

      -f /PATH/TO/SCRIPT_FILE:从指定文件中读取脚本并运行

      -r:支持扩展正则表达式

      -i: 直接修改源文件

Sed的地址定界

   #:表示数字,指定行

   $:最后一行

   #,#:从#行开始到#

   #,+#:从#行开始,到加#

   1~2:奇数行

   2~2:偶数行

编辑命令:

   d:删除模式空间匹配的行

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

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

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

   c \text:用text替换匹配到的行

   w /path/to/somefile:保存模式匹配的行至指定文件

   r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后合并

   =:为模式空间中的行打印行号

   !: 模式空间中匹配行取反处理

   s/regexp/replacement/:替换由regexp所匹配到的内容为replacement,对于替换有两个后选项:g:全局替换

        i:不区分大小写

        p:显示替换成功的行

高级编辑命令

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

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

    g:从保持空间取出数据覆盖至模式空间

    G:从保持空间取出内容追加至模式空间

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

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

    N:追加匹配到的行的下一行至模式空间,追加在模式空间中原有内容的后面

    d:  删除模式空间中的行

D :删除多行模式空间中的首行

1. 在特定行号后插入一行
      要在第25行以后插入一行新的内容xiaoming(插入内容将变成第26行),写法:
               # sed -i '25axiaoming' aaa.txt
               # sed -i '25a\xiaoming' aaa.txt       没有特殊字符时,加与不加转义符,效果都一样
     要在第25行插入一行新的内容 /usr/local/php.ini,写法:
                 # sed -i '25a/usr/local/php.ini' aaa.txt      需要加入转义符

2. 彻底替换某一行内容
     要把第3行的内容彻底替换为xiaoming*,写法:
      # sed -i "3s/.*/xiaoming */" /etc/ppp/chap-secrets

vim编辑器:

打开文件  # vim  [OPTION]… FILE…

       +#:  打开文件后,直接让光标处于第# 行的行首

       +/ PATTERN :打开文件后,直接让光标处于第一个被PATTERN 匹配到的行的行首

       vim + file  直接打开file, 光标在 最后一行

       vim -b file  二进制方式打开文件

       vim -d file1 file2… 比较多个文件

       vim -m file 只读打开文件

  ex file 或 或 vim e 直接进入ex 模式

   如果该文件存在,文件被打开并显示内容

   如果该文件不存在,当编辑后第一次存盘时创建它

 

 

vim :一个模式编辑器

  击键行为是依赖于 vim的 的  的“模式”

  三种主要模式:

        命令模式(默认):移动光标,剪切/ 粘贴文本

        插入(编辑)模式:修改文本

        扩展命令模式 :保存,退出等

  Esc键 退出当前模式

  EscEsc键 总是返回到命令模式

模式转换

1. Esc键:从输入模式转换为编辑模式

2. 从编辑模式–>输入模式,可使用:

       i:在光标所在处的前方转换为输入模式

           a:在光标所在处的后方转换为输入模式

           o:在光标所在处的下方新建一个空行并转换为输入模式

           I:在光标所在行的行首输入

           A:在光标所在行的行尾输入

           O:在光标所在行的上方新建一个空白行

3. 从编辑模式–>扩展模式:直接在窗口输入冒号(:)即可在窗口的左下方显示冒号

4. 从扩展模式–>编辑模式:敲击Esc

5. 锁定和解锁:CTRL+s,Ctrl+q

 

 关闭文件

    扩展模式:

         :q  退出

         :q!  强制退出,丢弃做出的修改

         :wq  保存退出

         :x  保存退出

   命令模式

        ZZ:保存退出

        ZQ:不保存退出

扩展模式

   按“: ”进入Ex 模式

   创建一个命令提示符:, 处于底部的屏幕左侧

       w  写(存)磁盘文件

       wq  写入并退出

       x  写入并退出(不推荐)

       q 退出

       q!不存盘退出,即使更改都将丢失

       r filename  读文件内容到当前文件中

       w filename 将当前文件内容写入另一个文件

 

命令模式的光标跳转

   字符间跳转:h: l: j: k:

        #COMMAND :跳转由# 指定的个数的字符;

   单词间跳转:

        w:下一个单词的词首

        e:当前或下一单词的词尾

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

        #COMMAND:由# 指定一次跳转的单词数

   当前页跳转:

        H:页首 M:页中间行 L:页底

   行首行尾跳转:

        ^:跳转至行首的第一个非空白字符;

        0:跳转至行首

        $:跳转至行尾

   行间移动:

        #G:直接跳转至#

        G:最后一行

        1G, gg:第一行

   句间移动:

        ) :下一句     ( :上一句

   段落间移动:

        }:下一段      {:上一段

  

   Ctrl+f:向文件尾部翻一屏

   Ctrl+b:向文件首部翻一屏

   Ctrl+d:向文件尾部翻半屏

   Ctrl+u:向文件首部翻半屏

 

Vim的编辑命令

     x:删除光标处的字符;

     #x:删除光标处起始的# 个字符

     xp:交换光标所在处的字符及其后面字符的位置

     ~: 转换大小写

 

     r:替换光标所在处的字符

     R:切换成REPLACE 模式

    

     d:删除命令,可结合光标跳转字符,删除跳转范围内的字符

     d$:删除到行尾

     d^:删除到非空行首

     d0:删除到行首

     #COMMAND

    dd:删除光标所在的行

    #dd :多行删除

    D:从当前光标位置一直删除到行尾,留空行,等同于d$

 

     y:  复制,行为相似于d 命令

     y$  y0  y^  ye  yw  yb同上

     #COMMAND

     Y :yy:复制行

     #yy:  复制多行

 

    p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面

P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

 

     c:修改后切换成插入模式

 命令模式 –>  插入模式

w b e $ 0 ^

所谓修改就是先删除,再转换为输入模式

    cc:删除当前行并输入新内容

    C:删除当前光标到行尾,并切换成插入模式

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

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

相关推荐

  • shell脚本变成之数组、字符串处理及其它功能补充

    数组定义:                  能够存储多个元素的内存空间,每个元素在数组中具有特定的索引编号,我们可以通过变量名和索引编号来查看数组中的某一元素。    &nbsp…

    Linux干货 2016-08-24
  • linux中数组的定义与使用

            我们常说,程序=指令+数据,往细一点的方向说,指令具体指的有哪些?数据又有哪些? 总结一下: 指令大概包括,编程语言中的语法关键字(如bash编程中的关键字有for,while,case,if,until,continue,break),还包括系统中的命令,和一些自己编写的函数,这些…

    2017-05-23
  • shell脚本编程基础之二(if、case、for、while、until、continue、break语句使用)

    在shell脚本编程中,我们可以根据命令的状态结果,判断要不要执行下一步,但是有时候要判断的问题不止一个,甚至对问题本身都要做判断;同时问题的结果有时也不止一个,这时要借助简单的逻辑与和逻辑或,就显得很无力;要完成复杂的任务,需要借助一定的流程控制:顺序执行、选择执行、循环执行、同时在脚本执行过程中,有用户交互输入的需; if语句 case语句 for语句 …

    Linux干货 2016-08-21
  • 初识Linux

                              初认识Linux 1.1 Linux的登录界面 在虚拟机安装CentOS 7中有提到,我在安装Linux操作系统的时候,采用的是命令行界面的登录方式,当然也有像Windows那样…

    Linux干货 2016-10-27
  • CentOS程序包管理

    对于Linux系统而言,其能执行的程序为二进制格式,而对于程序开发者而言,直接利用二进制开发程序是不太现实的,所以一般都是利用高级语言来进行软件开发,其程序也即称为源代码;那么我们在对一个程序进行安装、升级、卸载、 查询、校验等操作时,需要对每个源代码进行编译成为二进制程序,那么显然是不太现实的。所以在各Linux发行版中一般都带有程序包管理器。 所谓程序包…

    Linux干货 2016-08-25
  • 初学正则表达式

      前言:     在学正则表达式之前,有小伙伴讲解说,正则表达式在文本处理上功能非常强大、使用非常普遍,并且现在很多的工具软件都支持它,以后的学习工作中会经常使用,非常灵活,但是灵活的同时又是繁琐,需要小心翼翼的仔细推敲。抱着认真、好奇的心思听完了王老的课。我自己理解的正则表达式是,给一些符号赋予一定的涵义…

    Linux干货 2016-08-12

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 11:59

    文章整体架构清晰,层次分明,如果能理论结合实际会更好哦。