• 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
    
  • 相关阅读:
    [微信篇]ESP8266-NonOS学习笔记(十一)之微信小程序控制LED灯 Part 1
    [外设篇]ESP8266-SDK教程(十)之DHT11、OLED1306
    [基础篇]ESP32-RTOS-SDK教程(一)之Windows环境搭建
    [网络篇]ESP8266-SDK教程(九)之物联网标配MQTT实际测试
    [网络篇]ESP8266-SDK教程(八)之物联网标配MQTT服务端软件
    [网络篇]ESP8266-SDK教程(七)之物联网标配MQTT初相识
    [网络篇]ESP8266-SDK教程(六)之网页配置Wi-Fi名称和密码
    [网络篇]ESP8266-SDK教程(五)之SmartConfig、Airkiss等多种配网方式
    [基础篇]ESP8266-SDK教程(四)之GPIO操作(按键、LED、中断、定时器)
    [网络篇]ESP8266-SDK教程(三)之TCP通信Server<->Client
  • 原文地址:https://www.cnblogs.com/liping0826/p/13214013.html
Copyright © 2020-2023  润新知