zoukankan      html  css  js  c++  java
  • shell 三剑客之 sed 命令详解

     sed 编辑命令

    sed 编辑命令对照表

     

    把 /etc/passwd 文件赋值到当前路径下,进行操作

    cp /etc/passwd ./
    cat -n passwd
    

      

    sed 删除操作

    删除 passwd 文件的第一行

    sed -i '1d' passwd 

    删除 1-3 行

    sed -i '1,3d' passwd
    

    删除不能登录的用户,即 /sbin/nologin

    sed -i '//sbin/nologin/d' passwd
    

    删除以mail开头一直到以 ftp开头的行

    sed -i '/^mail/,/^ftp/d' passwd
    

    sed 增加操作  

    在/bin/bash 行后面追加一句话 This is user which can login to system

     sed -i '//bin/bash/a This is user which can login to system' passwd
    

    行前追加 在 root 和 nginx之间所有行之前追加 AAAAAAAAAAAAAAAAAAAA

     sed -i '/^root/,/^nginx/i AAAAAAAAAAAAAAAAAAAA' passwd 
    

      

    查找passwd文件中所有root的行,读取 list 的内容追加到其后面

    cat list
    

    sed -i '/root/r list' passwd 
    

    在passwd文件中将匹配到的 /bin/bash 行写入到 /tmp/user_login.txt 文件中

     sed '//bin/bash/w /tmp/user_login.txt' passwd
    

      

    sed 修改操作  

    修改:

    • s/pattern/string/ 查找并替换,查找符合pattern模式的字符串,将其替换为string 适配(一、二、三、四、五)
    • s/pattern/string/g g表示表示全部匹配
    • s/pattern/string/2g 2g表示:同一行内,只替换前两个匹配到的,剩下的不替换
    • s/pattern/string/ig 加i参数表示匹配时忽略大小写,g表示匹配到的全部替换

    把 /bin/bash 全部替换为/BIN/BASH

    sed -i 's//bin/bash//BIN/BASH/g' passwd
    

      

    只替换第一个root为ROOT

    sed -i 's/root/ROOT/' passwd 
    

    只替换 一行的第二个

    cat str.txt 
    

    sed -i 's/HADOOP/hadoop/2' str.txt 
    

    反向引用

    把匹配到的内容原封不动的保留下来 

     cat file.txt
    

    sed -i 's/Had..p/&s/g' file.txt
    

    1 也可以表示前面匹配到的内容 (比 & 更加灵活)

    sed -i 's/(had..ps)/1R/g' str.txt
    

    定义变量的时候如果使用单引号 ' 不会引用变量,注意需要使用双引号"$var" 

    sed 命令用法总结

    查询:

    • p 打印

    删除:

    • d 删

    增加:

    • a 匹配到的行后追加内容
    • i 匹配到的行前追加内容
    • r 将后面指定文件的内容追加到匹配到的行后面
    • w 将匹配到的行内容另存到其他文件中

    修改:

    • s/pattern/string/ 查找并替换,查找符合pattern模式的字符串,将其替换为string 适配(一、二、三、四、五)
    • s/pattern/string/g g表示表示全部匹配
    • s/pattern/string/2g 2g表示:同一行内,只替换前两个匹配到的,剩下的不替换
    • s/pattern/string/ig 加i参数表示匹配时忽略大小写,g表示匹配到的全部替换

    其他编辑命令:

    • = 显示行号

    什么是反向引用

    • &和1 引用模式匹配到的整个串

    在file中搜寻以1开头,然后跟两个任意字符,以e结尾的字符串

    sed "s/1..e/&r/g" file
    

      

    和上面实现一样的功能,使用1代表搜寻到的字符串

    sed "s/(1..e)/1r/g" file
    

    上面两种方式实现了一样的功能,分别使用&和1引用前面匹配到的整个字符串 两者区别在于&只能表示匹配到的完整字符串,只能引用整个字符串:而1可以使用()对匹配到的字符串进行二次操作

    例如:如果我们仅想要替换匹配到的字符串的一部分,name必须使用1这种方式,不能使用&

      

    sed中引用变量时注意事项:

    • 1、匹配模式中存在变量,则建议使用双引号
    • 2、sed中需要引入自定义变量时,如果外面使用单引号,则自定义变量也必须使用单引号
  • 相关阅读:
    STL之vector详解
    vim下使用YouCompleteMe实现代码提示、补全以及跳转设置
    Ceph之数据分布:CRUSH算法与一致性Hash
    ceph之crush算法示例
    Js正则Replace方法
    JS框架设计之加载器所在路径的探知一模块加载系统
    JS模块加载系统设计V1
    JS框架设计之模块加载系统
    Builder生成器(创建型模式)
    JS框架设计之主流框架的引入机制DomeReady一种子模块
  • 原文地址:https://www.cnblogs.com/crazymagic/p/11117363.html
Copyright © 2011-2022 走看看