处理文本的工具sed,vim 编辑器的使用 Linux版

处理文本的工具sed

Stream EDitor 行编辑器

sed一次处理一行的内容,处理时,将当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容送往屏幕,接着处理下一行不断重复,直到末尾。

     

     一次处理一行

文件—>内存空间—>屏幕

        模式空间 

文件—>内存空间—>屏幕

            |               

         保持空间  

sed  

     -n:不输出模式空间内容的自动打印

     -e:多点编辑

     -f:/PATH/TO/SCRIPT_FILE:从指定文件中读取编辑文本

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

     -i:原处编辑

     -i.bak   直接使用容易删去文件,使用的时候在后面加.bak 留下一个备份

     sed -i.bak '10d' f1

script:地址命令

地址定界:

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

      (2)单地址:

                #:指定的行

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

      (3)地址范围:         

                 #,#

                 #,+#

                 /pat1/,/pat2/  sed -n '/^root/,/^s/p'

                 #,/pat1/

      (4)~:步进

               1~2 奇数行

               2~2 偶数行

sed -n '2p' f1

将第二行显示出来

QQ图片20160810102321.png

编辑命令:

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

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

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

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

          c \text:替换行为单行或多行文本

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

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

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

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

s///: 查找替换,支持使用其它分隔符,s@@@,s###

替换标记:

         g:行内全局替换

         p:显示替换成功的行

         w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

nl =cat -n 显示行号   

sed 's@^[^#]@#&@' /etc/fstab 

QQ图片20160809212745.png

echo /etc/sysconfig/ |sed -r 's#(/.*/)[^/]+?#\1#' 

                     sed 's#^.*\<##'

                     sed -r 's#[^/]+/?##'

QQ图片20160809213500.png    

QQ图片20160809213722.png    

QQ图片20160809213956.png             

sed工具

高级编辑命令:

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

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

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

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

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

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

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

             d:删除模式空间中的行

             D:删除当前模式空间开端至\n的内容(不在传至输出),放弃之后的命令,但是对剩余模式空间重新执行sed

vim 编辑器

只在/etc/目录下的文件,用vim才显示格式高亮颜色。

QQ图片20160810102600.png

+#:+数字:直接打开跳到数字行

    +/PATTERN:  打开文件之后直接跳到关键词

    +空格:打开直接跳最后一行

    

-d:同时打开多个文件,并能对比出文件之间的不同

-m:打开为只读方式,不能修改

-e:直接进入ex模式

vim三种主要模式

       命令模式(默认):主要功能是查看文件内容

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

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

   hjkl 上下左右移动

插入(编辑)模式

       i:在原本光标的地方修改

       I:自动去到光标所在的行开头

       a:跳到光标所在的位置的后一位置

       A:直接跳到光标所在的行尾

       o:在当前光标所在的行下方打开一个新行

       O:在当前光标所在的行的上分打开一个新行

模式转换

插入模式 —->命令模式

          ESC

命令模式 —->扩展模式

           :

扩展模式 —->命令模式

          ESC

锁定和解锁:Ctrl+s,屏幕不显示,但是实际能够输入,解锁可以显示

            Ctrl+q

关闭文件

扩展模式:

        :q 退出

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

        :wq 保存退出

        😡 保存退出

        按“:”进入Ex模式

命令模式

        ZZ:保存退出

        ZQ:不保存退出

字符间跳转:

h: 左  l:右  j:下  k:上

单词间跳转:

          w:下一个单词的词首

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

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

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

当前也跳转:

          H:页首

          M:页中间行

          L:页底

行首行尾跳转:

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

          0:跳转至行首

          $:跳转至行尾

行间动:

          #G,扩展模式:#:跳转至由#指定行

          G:最后一行

          1G,gg:第一行

句间移动:

        ):下一句 

        (:上一句

段落间移动:

        }:下一段

        {:上一段

命令模式翻屏操作

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

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

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

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

字符编辑:

         x:删除光标处的字符

         #x:删除光标处其实的#个字符

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

         ~:转换大小写

替换命令:

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

         R:切换成REPLACE模式

删除命令:d

        d:删除命令,可以结合光标跳转字符,实现范围删除

        d$:删除到行尾

        d^:删除到非空行首

        d0:删除到行首

        dd:删除到光标所在的行

        #dd:多行删除

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

拷贝命令:y

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

          y$:复制到行尾

          y0:复制到行首

          y^:复制到非空行首

          yy:复制行

             #yy:复制多行

          y:复制整行   

粘贴命令: p

         p:粘贴当前光标所在后面

         P:粘贴在当前光标所在的前面

改变命令:c         

命令模式

100 i wang [ESC] 粘贴“wang”100次

y 复制,d删除,gU,变大写,gu变小写

地址定界:#:具体第#行,例如2表示第二行

          #,#:从左侧#表示行起始,到右侧#表示行结尾

          #,+#:从左侧#表示行起始,加上右边→_→#表示的行数

                 2,+3  表示2到5行

          .:表示当前行

          $:最后一行

                    .,$-1 当前行到倒数第二行

          %:全文,想当于1,$          

         

地址定界 扩展模式:

                 /at1/,/pat2/

                 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束

                #,/pat/

                /pat/,$

撤销更改:u 

#u撤销之前多次更改    

重做按:Ctrl+r

重复前一个操作:.

n. 复制n次前一次的操作。

U撤销光标所在行的所有更改

vim的寄存器

"a yy

"a p

"b yy

有26个命名寄存器和1个无名寄存器,常存放在不同的剪贴板内容,可以不同回话间共享。

用a,b,…,z表示,用"寄存器表示,放在数字和命令之间

       如:3"tyy表示复制3行到t寄存器中

       "tp 表示将t寄存器内容粘贴

未指定,将使用无名寄存器

有10个数字寄存器,用0,1,…9表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2存转到3,以此类推。数字寄存器不用在不同回话间共享。

编辑二进制文件

以二进制方式打开文件

           vim -b binaryfiy

    扩展命令模式下,利用xxd命令转换为可读的十六进制

           :%!xxd

    扩展命令模式下,利用xxd命令转换回二进制

           :%!xxd       

QQ图片20160810101343.png

可视化模式

    v面向字符

    V面向行

    ctrl -v 面向块

可视化键可用于与移动键结合使用:

    w,),},箭头等

突出显示的文字可以被删除,复制,变更,过滤,搜索,替换等。

多文件模式

vim f1,f2,f3…

    :next 下一个 

    :prev 前一个

    :first 第一个

    :last 最后一个

    :wall 保存所有

    :qall 退出所有

    :wqall 保存退出所有

多文件分隔

    vim -o | -O f1 f2

    -o:水平分隔

    -O:垂直分隔

  在窗口间切换:Ctrl+w

                可以通过Ctrl+w 可以切换都其他分割窗口

      单文件窗口分隔:

                     水平分割:Ctrl+w,s

                     垂直分割:Ctrl+w,v

                     取消相邻的窗口:Ctrl+w,q 

                     取消全部窗口:Ctrl+w,o

                     退出:wqall

QQ图片20160809215023.png

QQ图片20160809214453.png

vim 配置文件:

            全局:/etc/vimrc

            个人:~/.vimrc

    扩展模式:当前vim进程有效

             (1)行号

                  显示:set number,简写为:set nu

                  取消显示:set nonumber,简写:set nonu

              (2)括号成对匹配

                  匹配:set showmatch,简写为set sm

                  取消:set nosm

              (3)自动缩进

                  启用:set ai

                  禁用:set noai

              (4)高亮搜索

                  启用:set hlsearch

                  禁用:set nohlsearch

             (5)语法高亮

                  启用:syntax on

                  禁用:syntax off

              (6)忽略字符的大小写

                  启用:set ic

                  不忽略:set noic

              (7)文件格式

                  启用:fileformat=unix (Linux)

                  不忽略:fileformat=dos (windows)

              (8)设置文本宽度

                   :set textwidth=65(vim only)宽度

                   :set wrapmargin=15

              vim/vi 内置帮助

                     :help

                     :help topic

1、如何设置tab缩进为4个字符?

   :settabstop=4 softtabstop=4 shiftwidth=4 noexpandtab 

2、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

sed 's@//etc//sysconfig//init@//var//log@'g /tmp/functions 

3.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;

sed 's@^[#]@#\n@' /tmp/functions 

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