文本交互工具sed

sed非交互式的文本编辑工具,功能强大支持正则,可以写在脚本中达到对文件的非交互修改,是不是比vim强大很多 大笑
sed工具是逐行处理器,简单理解就是读入文本第一行匹配,符合执行动作第二行第三行......
这里的格式 :sed   选项    “  匹配条件  指令“  文件                                  #条件不写就是匹配所有行
选项:-r支持扩展正则     -i匹配文本修改     -d删除匹配行  -n屏蔽默认输出
匹配条件:行,正则,全部
指令 : d删除   p打印   s替换
匹配条件:1.行匹配          sed   -n   ”3p“   /etc/passwd                                                              打印第三行
                                     sed   -n   ”3,6p“   /etc/passwd                                                         打印3-6行
                                     sed   -n  “4!d”  /etc/passwd                                                  删除除第四行外所有      
                                                         sed   -n   ”3p;5p;10,+2d“   /etc/passwd           打印3行,5行,删除第10行和其后面2行  
                                     sed   -n “ 2~2p ” /etc/passwd     打印第2行,2+2行,2+2+2行          就是偶数行
                                     sed   -n “1~2p”   /etc/passwd     打印第1行,1+2行,1+2+2行          就是奇数行
          *  2.正则匹配       sed   -n    "/^root/p"   /etc/passwd         打印以root开头的行
                                      sed   -n  “/bash$/p” /etc/passwd        打印以bash结尾的行      
                                      sed    -n “/^$/d”             httpd.conf       删除文件空白行
                                      sed    -n “/^root/!d” /etc/passwd           删除除了以root开头的行            
                                      sed    -r     "/(^$|^#)/d"     /etc/httpd/conf/httpd.conf   删除空行和以星号开头的行
                                      sed   -n  “/root/=”  /etc/passwd               显示匹配root的行号    
                                      sed   -n  “$=”          /etc/passwd                       显示尾行的行号   ,文件多少行 
            重点指令s加扩展正则      
            这里写个素材  7.txt    2017 2011 2018
                                               2017 2017 2024
                                               2017 2017 2017        
            sed   “s/2017/xxxx/”   7.txt           替换第一个2017为xxxx
            sed     ”s/2017/xxxx/2“   7.txt       这里替换每行第二个2017为xxxx
           为了方便查看替换结果 上面两个改造      
         
            sed   -n “s/2017/xxxx/p”      7.txt             替换第一个2017为xxxx
            sed   -n    ”s/2017/xxxx/2p”  7.txt            这里替换每行第二个2017为xxxx 
            sed   -n    ”s/2017/xxxx/gp”  7.txt            这里替换全部2017为xxxx 
            sed   -n   “s/2017//2p”         7.txt              这里是删除每行第二个2017  与d指令不同d只能删除行
       做个例题:将所有passwd下的  sbin/nologin   替换为   bin/bash(使用技巧s的/可以改为#或者其他要不然就只能加转义)
           sed    -n  “s/\/sbin\/nologin/\/bin\/bash/p”    /etc/passwd      比较下还是用第二个吧
           sed    -n  “s#/sbin/nologin#/bin/bash#p”    /etc/passwd      显示修改的内容  
           /可以用   #   !   ,   替换     
           sed   -n   "/^example/s/^/#/"         httpd.conf           把example开头行注释
           sed   -n   "s/^#example/example/"        httpd.conf           把example取消注释      
          这里sed精髓    扩展正则:()保留【复制】  \1 粘贴第一个括号  
         写个a.txt           qu  guan  wen
          将第一个字与最后一个字替换位置
            sed   -r     “s/(^.)(.*)(.$)/\3\2\1/”  a.txt                 把文件内容拆分复制再粘贴     'q'    'u guan we'    'n '
         正则  .   代表任意单个字符     .*  代表但个字符匹配任意次   
           只要想到的就能匹配到的正则非常强大流弊

           sed   -r     "s/^(.)   (.*)   (.)$/\3\   \2  \1/"   a.txt       这个   效果是      ’wen ‘   ’guan ‘  ’qu‘     

           删除所有的数字

           sed   -r   “s/[0-9]//g” /etc/passwd                替换文件中所有数字一定注意小g,g没有只替换第一个 。

           


                           

猜你喜欢

转载自blog.csdn.net/m0_37628356/article/details/80360833
今日推荐