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

    1.1 sed介绍

    sed === stream editor流编辑器

    1.2 sed功能与版本

     处理纯文本文件、日志、配置文件等

    1.3 sed命令常用的功能

    1.3.1 查询

    cat>person.txt<<EOF
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    EOF

    ####查找 某一行-指定行号

    [root@dzc ~]# sed -n '3p' person.txt

    103,Alex,COO

    ###查找某一行-模糊

    [root@dzc ~]# sed -n '/yy/p' person.txt

    104,yy,CFO

    ###查找连续的行-指定行号

    [root@dzc ~]# sed -n '3,5p' person.txt

    103,Alex,COO

    104,yy,CFO

    105,feixue,CIO

    ###查找连续的行(找出从包含101的行到包含103的行)

    [root@dzc ~]# sed -n '/101/,/103/p' person.txt

    101,oldboy,CEO

    102,zhangyao,CTO

    103,Alex,COO

    ####表示某几行

    [root@dzc ~]# sed -n '1p;4p' person.txt

    101,oldboy,CEO

    104,yy,CFO

    1.3.2 增加

    ###我们想在文件中放入新的内容

    ####sed i/a

        #i === insert 插入某一行的上一行

        #a === append 追加到某一行的下面

       

    [root@oldboyedu-40 ~]# sed '3i 100,tanjiaoshou,XO' person.txt

    101,oldboy,CEO

    102,zhangyao,CTO

    100,tanjiaoshou,XO

    103,Alex,COO

    104,yy,CFO

    105,feixue,CIO

    106,lidao,UFO

    [root@oldboyedu-40 ~]# sed '3a 100,tanjiaoshou,XO' person.txt

    101,oldboy,CEO

    102,zhangyao,CTO

    103,Alex,COO

    100,tanjiaoshou,XO

    104,yy,CFO

    105,feixue,CIO

    106,lidao,UFO

    1.3.3 删除

    企业案例:打印文件内容但不包含oldboy的行


    [root@oldboyedu-40 ~]# sed '/oldboy/d' person.txt 
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,lidao,UFO

    [root@oldboyedu-40 ~]# sed -n '/oldboy/p' person.txt 
    101,oldboy,CEO
    [root@oldboyedu-40 ~]# sed -n '/oldboy/!p' person.txt 
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,lidao,UFO

    1.3.4 替换 s

    g global全局-把sed命令找到的内容都进行替换,sed默认只替换第一个找到的
    [root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#' person.txt 
    <1>01,oldboy,CEO
    <1>02,zhangyao,CTO
    <1>03,Alex,COO
    <1>04,yy,CFO
    <1>05,feixue,CIO
    <1>06,lidao,UFO
    [root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#g' person.txt 
    <1><0><1>,oldboy,CEO
    <1><0><2>,zhangyao,CTO
    <1><0><3>,Alex,COO
    <1><0><4>,yy,CFO
    <1><0><5>,feixue,CIO
    <1><0><6>,lidao,UFO
    ##把找到的第二个内容替换
    [root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#2' person.txt 
    1<0>1,oldboy,CEO
    1<0>2,zhangyao,CTO
    1<0>3,Alex,COO
    1<0>4,yy,CFO
    1<0>5,feixue,CIO
    1<0>6,lidao,UFO
    ##sed 's#[0-9]#<&>#2'  把前面正则 匹配到的第二个 内容进行替换 
    [root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#2g' person.txt 
    1<0><1>,oldboy,CEO
    1<0><2>,zhangyao,CTO
    1<0><3>,Alex,COO
    1<0><4>,yy,CFO
    1<0><5>,feixue,CIO
    1<0><6>,lidao,UFO

    1.3.5 单引号 双引号 不加引号

    单引号 所见即所得 吃啥吐啥

    [root@oldboyedu-40 ~]# echo '$LANG $(hostname) {a..e}'
    $LANG $(hostname) {a..e}

    双引号 特殊字符进行解析

     
    [root@oldboyedu-40 ~]# echo "$LANG $(hostname) {a..e}"
    en_US.UTF-8 oldboyedu-40 {a..e}
    [root@oldboyedu-40 ~]# a=hello oldboy
    -bash: oldboy: command not found
    [root@oldboyedu-40 ~]# a="hello oldboy"
    [root@oldboyedu-40 ~]# echo $a
    hello oldboy

    不加引号 支持 通配符

    [root@oldboyedu-40 ~]# echo $LANG $(hostname) {a..e}
    en_US.UTF-8 oldboyedu-40 a b c d e

    [root@dzc ~]# sed "s#$sub#<&>#g" person.txt

    101,<oldboy>,CEO

    102,zhangyao,CTO

    103,Alex,COO

    104,yy,CFO

    105,feixue,CIO

    [root@dzc ~]# aim=nihao

    [root@dzc ~]# sed "s#$sub#$aim#g" person.txt

    101,nihao,CEO

    102,zhangyao,CTO

    103,Alex,COO

    104,yy,CFO

    105,feixue,CIO

    1.3.6 企业案例:系统开机启动案例

    系统中必须运行的服务

    1. crond 定时任务
    2. sshd 远程连接服务
    3. network 网络服务
    4. rsyslog system log 系统日志服务

    /var/log/cron

    /var/log/messages

    /var/log/secure

    1. sysstat 系统工具

    ###第一个里程碑-保留开启的服务

    chkconfig |sed -r '/sshd|network|rsyslog|crond|sysstat/d'

    ###第二个里程碑-取出服务的名字

    chkconfig |sed -r '/sshd|network|rsyslog|crond|sysstat/d'|sed -r 's#^(.*)0:.*$#1#g'

    ###第三个里程碑-拼接出想要的形式

    #chkconfig  服务名字 off

    chkconfig |sed -r '/sshd|network|rsyslog|crond|sysstat/d'|sed -r 's#^(.*)0:.*$#chkconfig 1 off#g'|bash

    精简版

    [root@dzc ~]# chkconfig|sed -nr '/sshd|network|rsyslog|sysstat|crond/!s#^(.*)0:.*#chkconfig  1 off#gp'

  • 相关阅读:
    电路学习实战分析之mos-2
    我这博客咋分类的?
    学习shell之后,实战分析
    二叉树,二叉排序树,红黑树 学习
    哈希表 学习
    《转》C语言可变参函数的实现
    Linux工具记录
    苏州之旅有感
    git 命令动画学
    软件工程相关博客
  • 原文地址:https://www.cnblogs.com/dzc-/p/8082035.html
Copyright © 2011-2022 走看看