zoukankan      html  css  js  c++  java
  • sed 替换命令使用

    输入文件不会被修改,sed 只在模式空间中执行替换命令,然后输出模式空间的
    内容。
    文本文件 employee.txt

    101,John Doe,CEO
    102,Jason Smith,IT Manager
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane Miller,Sales Manager


    1.用 Director 替换所有行中的 Manager

    替换命令用到参数s 注意代码格式

    [root@localhost /]# sed 's/Manager/Director/' employee.txt
    101,John Doe,CEO
    102,Jason Smith,IT Director
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane Miller,Sales Director

     


    2.只把包含 Sales 的行中的 Manager 替换为 Director

    [root@localhost /]# sed '/Sales/s/Manager/Director/' employee.txt
    101,John Doe,CEO
    102,Jason Smith,IT Manager
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane Miller,Sales Director

     

    3.全局标志 g

    用大写 A 替换第一次出现的小写字母 a

    [root@localhost /]# sed 's/a/A/' employee.txt
    101,John Doe,CEO
    102,JAson Smith,IT Manager
    103,RAj Reddy,Sysadmin
    104,AnAnd Ram,Developer
    105,JAne Miller,Sales Manager

     

    把所有小写字母 a 替换为大写字母 A

    [root@localhost /]# sed 's/a/A/g' employee.txt
    101,John Doe,CEO
    102,JAson Smith,IT MAnAger
    103,RAj Reddy,SysAdmin
    104,AnAnd RAm,Developer
    105,JAne Miller,SAles MAnAger

     

    4.数字标志

    把第二次出现的小写字母 a 替换为大写字母 A

    [root@localhost /]# sed 's/a/A/2' employee.txt
    101,John Doe,CEO
    102,Jason Smith,IT MAnager
    103,Raj Reddy,SysAdmin
    104,Anand RAm,Developer
    105,Jane Miller,SAles Manager


    建立一下文件

    vi substitute-locate.txt
    locate command is used to locate files
    locate command uses database to locate files
    locate command can also use regex for searching

     

    用刚才建立的文件,把每行中第二次出现的 locate 替换为 find

    [root@localhost /]# sed 's/locate/find/2' substitute-locate.txt
    locate command is used to find files
    locate command uses database to find files
    locate command can also use regex for searching

     

    5.打印标志 p


    只打印替换后的行

    [root@localhost /]# sed -n 's/John/johnny/p' employee.txt
    101,johnny Doe,CEO

     


    把每行中第二次出现的 locate 替换为 find 并打印出来

    [root@localhost /]# sed -n 's/locate/find/2p' substitute-locate.txt
    locate command is used to find files
    locate command uses database to find files

     

    6.写标志w

    标志 w 代表 write,当替换操作执行成功后,它把替换后的结果保存的文件。
    把每行出现的 John 替换为 Johnny,只把替换后的内容写到 output.txt 中

    [root@localhost /]# sed -n 's/John/Johnny/w output.txt' employee.txt
    [root@localhost /]# cat output.txt
    101,Johnny Doe,CEO

     

    把每行第二次出现的 locate 替换为 find,把替换的结果保存到文件中,同时显示输入文件所有内容

    [root@localhost /]# sed 's/locate/find/2w output.txt' substitute-locate.txt
    locate command is used to find files
    locate command uses database to find files
    locate command can also use regex for searching
    [root@localhost /]# cat output.txt
    locate command is used to find files
    locate command uses database to find files

     

    7.忽略大小写标志 i


    把 john 或 John 替换为 Johnny,但是文件中的John中的J是大写,所以用i参数忽略大小写

    [root@localhost /]# sed 's/john/Johnny/i' employee.txt
    101,Johnny Doe,CEO
    102,Jason Smith,IT Manager
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane Miller,Sales Manager

     


    8.执行命令标志 e

    如下图所示,e参数就是执行的作用 文本文件ls -l /etc/passwd e参数则是执行这条命令

    [root@localhost /]# vi /files.txt
    [root@localhost /]# cat /files.txt
    /etc/passwd
    /etc/group
    [root@localhost /]# sed 's/^/ls -l/' files.txt
    ls -l/etc/passwd
    ls -l/etc/group
    [root@localhost /]# sed 's/^/ls -l /e' files.txt
    -rw-r--r--. 1 root root 1766 10月 24 15:15 /etc/passwd
    -rw-r--r--. 1 root root 920 10月 24 15:15 /etc/group

     

    给特定行加注释或者删除注释

    [root@VM-0-13-centos home]# cat test 
    locate command is used to locate files
    locate command uses database to locate files
    locate command can also use regex for searching
    
    #  &符号表示替换字符串中被找到的部分, 这条命令是替换以locate开头的所有行
    [root@VM-0-13-centos home]# sed 's/^locate/#&' test 
    sed: -e expression #1, char 12: unterminated `s' command
    [root@VM-0-13-centos home]# sed 's/^locate/#&/' test 
    #locate command is used to locate files
    #locate command uses database to locate files
    #locate command can also use regex for searching
    
    # locate被标记为1 ,1就是复制这个位置的内容  如果有 第二个 那么久2就是复制第二个位置的内容

    [root@VM
    -0-13-centos home]# sed 's!^#(locate)!1!' test locate command is used to locate files locate command uses database to locate files locate command can also use regex for searching [root@VM-0-13-centos home]#

       

     sed 替换命令 s 后面的三个分隔符可以指定为其他符号,不一定都要是"/",可以用 “|” ,“!”,“#” 等来分隔。

        sed -i '/pam_wheel.so use\_uid/ s|^#(.*)$|1|' /etc/pam.d/su  #先模式匹配找到行,再用s替换掉注释

     sed 添加注释和取消注释的简单例子

    [root@localhost yum.repos.d]# cat Local.repo 
    [Local]
    name=localyum
    baseurl=file:///mnt/cdrom
    enabled=1
    gpgcheck=0
    [root@localhost yum.repos.d]# sed -n 's/^en/#en/p' Local.repo           #这行是找到以en开头的行,替换en为#en
    #enabled=1

     [root@localhost yum.repos.d]# sed -n 's/^#en/en/p' Local.repo           #这个同理取消注释
      enabled=1



    参考链接:https://blog.csdn.net/weixin_43150761/article/details/83152456

  • 相关阅读:
    Oracle专家高级编程 第二章 服务器和文件
    Oracle专家高级编程 第一章
    Leetcode 4 寻找两个正序数组的中位数
    Leetcode 3 无重复字符的最长子串
    Leetcode 2 两数相加
    Leetcode 1 两数之和
    gitee开源许可证
    js新特性展开符的使用方式
    webpack高速配置
    JS中日期比较时斜杠与横杠的区别
  • 原文地址:https://www.cnblogs.com/fengfengyang/p/15221361.html
Copyright © 2011-2022 走看看