zoukankan      html  css  js  c++  java
  • sed命令

    1.sed简介

    Linux sed 命令是利用脚本来处理文本文件。

    sed 可依照脚本的指令来处理、编辑文本文件。

    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
    语法

    sed [-hnV][-e<script>][-f<script文件>][文本文件]
    

    参数说明

    • -i:直接修改文件内容
    • -f:<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
    • -h:或--help 显示帮助。
    • -n:或--quiet或--silent 仅显示script处理后的结果。
    • -V:或--version 显示版本信息。
    • -e:<脚本>或--expression=<脚本> 以选项中指定的script来处理输入的文本文件。
    • -r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
    • -{}:可组合多个命令,以分号分隔

    动作说明

    • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

    正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改。若希望直接修改文件内容,应添加选项 -i 。为了避免生产环境中因误操作导致系统故障,使用时要谨慎。

    2.实例

    2.1给文件的每一行加注释

    [root@localhost ~]# cat sed 
    hubei
    hunan
    beijin 
    shanghai
    guandong
    shenzheng
    hainan
    jiangxi
    fujian
    shangdong
    hebei
    tianjin
    [root@localhost ~]# sed -i 's/^/#/g' sed 
    [root@localhost ~]# cat sed 
    #hubei
    #hunan
    #beijin 
    #shanghai
    #guandong
    #shenzheng
    #hainan
    #jiangxi
    #fujian
    #shangdong
    #hebei
    #tianjin
    

    2.2给文件中的指定行加注释

    [root@localhost ~]# cat sed
    hubei
    hunan
    beijin 
    shanghai
    guandong
    shenzheng
    hainan
    jiangxi
    fujian
    shangdong
    hebei
    tianjin
    [root@localhost ~]# sed -i 's/^h/#&/' sed
    [root@localhost ~]# cat sed 
    #hubei
    #hunan
    beijin 
    shanghai
    guandong
    shenzheng
    #hainan
    jiangxi
    fujian
    shangdong
    #hebei
    tianjin
    
    //在文件的第一行的行首加注释
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '1s/^/#/g' sed
    [root@localhost ~]# cat sed 
    #beijin 
    shanghai
    guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    
    //在文件中的第三行行首加注释
    [root@localhost ~]# sed -i '3s/^/#/g' sed
    [root@localhost ~]# cat sed 
    #beijin 
    shanghai
    #guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    
    //在文件中的1-3行行首加注释
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '1,3s/^/#/g' sed
    [root@localhost ~]# cat sed 
    #beijin 
    #shanghai
    #guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    

    2.3取消文件中所有注释

    [root@localhost ~]# cat sed 
    #beijin 
    #shanghai
    #guandong
    #shen#zheng
    #jiangxi
    #fujian
    #shangdong
    #tianjin
    [root@localhost ~]# sed -i 's/#//g' sed 
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    

    2.4取消指定行的注释

    //取消文件中第二行的所有注释
    [root@localhost ~]# cat sed 
    beijin 
    #shang#hai
    #guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '2s/#//g' sed 
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    #guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    
    //取消文件中1-3行中的所有注释
    [root@localhost ~]# cat sed 
    beijin 
    #shanghai
    #guandong
    #shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '1,3s/#//g' sed 
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    #shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    
    //取消‘shenzheng’这行的注释
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    #shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '/shenzheng/s/#//g' sed 
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    shenzheng
    jiangxi
    fujian
    shangdong
    tianjin
    
    //取消‘shenzheng’这一行的所有注释
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    #shen#zheng huan #ying ni
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '/shen/s/#//g' sed 
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    shenzheng huan ying ni
    jiangxi
    fujian
    shangdong
    tianjin
    

    3.删除

    3.1删除指定行

    //删除问文件中第二行
    [root@localhost ~]# cat sed 
    beijin 
    shanghai
    guandong
    shenzheng huan ying ni
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '2d' sed 
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    fujian
    shangdong
    tianjin
    
    //删除文件中第5行到最后一行
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    fujian
    shangdong
    tianjin
    [root@localhost ~]# sed -i '5,$d' sed 
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    

    4.搜索

    //打印出文件中第2行到第4行的内容
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    [root@localhost ~]# sed -n '2,4p' sed 
    guandong
    shenzheng huan ying ni
    jiangxi
    
    //打印出文件中含有‘i’的行
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    hubei
    hunan
    yunnan
    [root@localhost ~]# sed -n '/i/p' sed 
    beijin 
    shenzheng huan ying ni
    jiangxi
    hubei
    
    //搜索出文件中含有‘h’的行,进行删除后显示删除后的剩余行
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    hubei
    hunan
    yunnan
    [root@localhost ~]# sed  '/h/d' sed 
    beijin 
    guandong
    jiangxi
    yunnan
    

    5.替换

    //将文件中的‘ni’替换为‘wo’
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying ni
    jiangxi
    hubei
    hunan
    yunnan
    [root@localhost ~]# sed -i 's/ni/wo/g' sed 
    [root@localhost ~]# cat sed 
    beijin 
    guandong
    shenzheng huan ying wo
    jiangxi
    hubei
    hunan
    yunnan
    
    //每一行结尾若为. 则换成 !
    [root@localhost ~]# cat sed 
    beijin. 
    guandong,
    shenzheng huan ying wo.
    jiangxi-
    hubei-
    hunan.
    yunnan
    [root@localhost ~]# sed -i 's/.$/!/g' sed 
    [root@localhost ~]# cat sed 
    beijin. 
    guandong,
    shenzheng huan ying wo!
    jiangxi-
    hubei-
    hunan!
    yunnan
    

    6.sed高级用法

    //配合awk取出本机的ip
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:43:45:11 brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.160/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
           valid_lft 4648sec preferred_lft 4648sec
        inet6 fe80::ad8c:10d3:b579:8614/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    [root@localhost ~]# ip a|grep 'inet'|sed -n '3p'|awk '{print $2}'|sed 's//24//g'
    192.168.0.160
    
  • 相关阅读:
    非模式窗体和模式窗体(转
    一次性帮你解决毕业论文的所有排版问题
    c# Wndproc的使用方法
    ref和out 转
    c# 基本语法(转)
    U盘装/虚拟光驱 装双系统
    U盘启动盘 装系统
    Hibernate查询条件封装对象Expression介绍 Hi
    asp.net实现 gridview 鼠标单击任意字段选中一行 ,并获取数据 Hi
    C#如何取出非公共成员 Hi
  • 原文地址:https://www.cnblogs.com/liping0826/p/13214013.html
Copyright © 2011-2022 走看看