• 【linux之sed及vim】


    一、sed

    sed 文本处理工具 流编辑器 行编辑器
    保留空间
    模式空间
    sed不会影响原文件的内容,它处理的是它载入模式空间的内容

    sed [options].."AddressCommand" FILENAME

    sed -n 1,3p /etc/passwd

    Address:

    复制代码
     1. # :文件中的第#行(数字所代表的那一行)
        $ :最后一行
     2. #,# :从第#行到第#行的连续范围,如:2,5就标识从第二行到第五行
     3. /pattern/:被正则表达式匹配的行
     4./pattern1/,/pattern2/:从被pattern1匹配的行开始到被pattern2匹配的行结束
     5.#,+N : 从某一行开始向后再选择N行 如:2,+5
     
    复制代码

    options:

        -n : 只处理被模式匹配到的行,并不能使用默认的P命令
        -r :支持扩展的正则表达式
        -i :替代,会改变原文件的内容
        -e :可以写多个表达式。如:-e 表达式1 -e 表达式2 如: sed -e '2d' -e '4d' test
        -f : 脚本名称 :将脚本文件中包含的命令全部执行
        

    command:

    复制代码
     p:显示,默认的命令
     d:删除
     a string:追加string内容(匹配行后面)
     i string:在匹配行前面添加内容
     r FILENAME:读取一个文件,将文件内容加载到匹配行后面
     w:将匹配的内容另存为某个文件
     s/pattern/string/修饰符:将模式匹配的内容替换为string,根据修饰符来替换  sed @@@ sed ###
         默认只换一行
         修饰符: g 所有  如: sed 's@@#@g' fstab
    
         如: sed 's/l(..e)/L1/g'
    复制代码

    sed -n 1,3p /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    复制代码
    ed练习:
      1)删除/etc/grub.conf文件中行首的空白符;
      sed -r 's/^[[:space:]]+//g' /etc/grub.conf
      2)替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
      sed -r 's/id:[0-9]:initdefault/id:5:initdefault/g' /etc/inittab
      3)删除/etc/bashrc文件中的空白行;
      sed -r '/^$/d' /etc/bashrc 
      4)删除/etc/inittab文件中开头的#号; 
      sed -r 's/^#//g' /etc/inittab 
      5)删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;
    vim test.txt
    cat test.txt
    #abc
    # hello world
       # hi world
    
    sed -r 's/^#[[:space:]]+//g' ./exercise.txt
      6)删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#;
      sed -r 's/^[[:space:]]+#+//g' test.txt
    
      7)取出一个文件路径的目录名称;
    #!/bin/bash
      if [ $# -ne 1 ];then
       echo "usage:test7.sh FILEPATH"
      fi
      echo $1 | sed -r 's@(/.*)*/.*@1@g'
    
      8)取出一个文件路径的基名。
      #!/bin/bash
      if [ $# -ne 1 ];then
       echo "usage:test7.sh FILEPATH"
      fi
      echo $1 | sed -r 's@/.**/(.*)@1@g'
    复制代码

    补充:

    basename $0 查看文件本身

    二、vim编辑器

    文本编辑工具 vi nano emacs
    vi(visual interface)
    vim (VI improved)
    两个程序,推荐用vim,有语法高亮
    which vi vim
    /bin/vi
    /usr/bin/vim

    全屏编辑器,模式化编辑器

    vim模式:
    编辑模式(命令模式)
    输入模式
    末行模式

    1、模式转换

    复制代码
    编辑-->输入:
        i: 在当前光标所在字符的前面,转为输入模式;
        a: 在当前光标所在字符的后面,转为输入模式;
        o: 在当前光标所在行的下方,新建一行,并转为输入模式;
        
        I:在当前光标所在行的行首,转换为输入模式
        A:在当前光标所在行的行尾,转换为输入模式
        O:在当前光标所在行的上方,新建一行,并转为输入模式;
    
    输入-->编辑:
        ESC
        
    编辑-->末行:
        :/ ?
    
    末行-->编辑:
        ESC, ESC    Enter   BackSpace
    复制代码

     

    2、打开文件

    # vim /path/to/somefile
        vim +# :打开文件,并定位于第#行 
        vim +:打开文件,定位至最后一行
        vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首
    
        默认处于编辑模式

    3、关闭文件

    复制代码
    1、末行模式关闭文件
    :q  退出
    :wq 保存并退出
    :q! 不保存并退出
    :w 保存
    :w! 强行保存
    :wq --> :x
    2、编辑模式下退出 ZZ: 保存并退出 ZQ: 不保存退出
    复制代码

     

    4、移动光标(编辑模式)

    复制代码
    1、逐字符移动:
        
        h: 左 j: 下 k: 上 l: 右
            
       #h: 移动#个字符;
     
    2、以单词为单位移动
        w: 移至下一个单词的词首
        e: 跳至当前或下一个单词的词尾
        b: 跳至当前或前一个单词的词首
        
        #w: 
        
    3、行内跳转:
        0: 绝对行首
        ^: 行首的第一个非空白字符
        $: 绝对行尾
    
    4、行间跳转
        #G:跳转至第#行;
        G:最后一行
      gg:第一行第一个字符位置
        
        末行模式下,直接给出行号即可
      :# :跳转至第#行
      :$ :最后一行
    复制代码

    5、翻屏

    Ctrl+f: 向下翻一屏
    Ctrl+b: 向上翻一屏
    
    Ctrl+d: 向下翻半屏
    Ctrl+u: 向上翻半屏

    6、删除单个字符

    x: 删除光标所在处的单个字符
    X: 删除光标所在处前面的单个字
    #x: 删除光标所在处及向后的共#个字符

    7、删除命令: d

    d命令跟跳转命令组合使用;
    #dw, #de, #db, d0, d^, d$, dG, dgg, d#G

    dd: 删除当前光标所在行
    #dd: 删除包括当前光标所在行在内的#行;

    末行模式下:
    StartADD,EndADDd
    .: 表示当前行
    $: 最后一行
    +#: 向下的#行

    8、粘贴命令 p

    p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
    P: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;

    9、复制命令 y

    用法同d命令

    10、修改:先删除内容,再转换为输入模式

        c: 用法同d命令
        C: = c$

    11、替换:r

    R: 替换模式

    12、撤消编辑操作 u

    u:撤消前一次的编辑操作
    连续u命令可撤消此前的n次编辑操作
    #u: 直接撤消最近#次编辑操作
    撤消最近一次撤消操作:Ctrl+r

    13、重复前一次编辑操作

    .

    14、可视化模式

    v: 按字符选取
    V:按矩形选取

     

    15、查找

    /PATTERN 从上往下
    ?PATTERN 从下往上
    n 顺序查找
    N 倒序查找

    16、查找并替换

    在末行模式下使用s命令
    ADDR1,ADDR2s@PATTERN@string@gi (i 忽略大小写)
    1,$ 第一行到最后一行
    %:表示全文

    17、使用vim编辑多个文件

    vim FILE1 FILE2 FILE3
    :next 切换至下一个文件
    :prev 切换至前一个文件
    :last 切换至最后一个文件
    :first 切换至第一个文件
    :qa 全部退出

     

    18、分屏显示一个文件

    复制代码
    Ctrl+w, s: 水平拆分窗口
    Ctrl+w, v: 垂直拆分窗口
    
    在窗口间切换光标:
    Ctrl+w, 上下左右
    
    :qa 关闭所有窗口
    复制代码

     

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

    末行模式下使用w命令
    :w
    :ADDR1,ADDR2w /path/to/somewhere

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

    :r /path/to/somefile

    21、跟shell交互

    :! COMMAND

     

    22、高级功能

    复制代码
    1、显示或取消显示行号
    :set number
    :set nu
    
    :set nonu
    
    2、显示忽略或区分字符大小写
    :set ignorecase
    :set ic
    
    :set noic
    
    3、设定自动缩进
    :set autoindent
    :set ai
    :set noai
    
    4、查找到的文本高亮显示或取消
    :set hlsearch
    :set nohlsearch
    
    5、语法高亮
    :syntax on
    :syntax off
    复制代码

     

    23、配置文件

    /etc/vimrc 重启vim即生效
    ~/.viminfo 
    
    学习导师
    
    vimtutor
  • 相关阅读:
    OpenGL中FrameBuffer使用
    每天进步一点点>结构化异常处理(SEH)
    js操作cookies
    [转]高性能网站优化与系统架构
    正则-匹配超链接地址及内容
    在c#.net中操作XML
    ActionScript 3 step by step (6) 元标记
    Facebook CEO:终极目标并非出售或上市
    ActionScript 3 step by step (3) 事件处理
    ActionScript 3 step by step (2) 使用Trace()跟踪输出
  • 原文地址:https://www.cnblogs.com/yf2196717/p/14810103.html
Copyright © 2020-2023  润新知