• day18 sed


    具体功能作用:
    1) 文件中添加信息的能力 (增) ok
    2) 文件中删除信息的能力 (删) ok
    3) 文件中修改信息的能力 (改)
    4) 文件中查询信息的能力 (查) OK

    sed命令的语法信息
    sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    命令 参数 条件+处理= (指令) 处理文件信息

    显示出文件中有oldboy行的信息
    sed -n '/oldboy/p' oldboy.txt

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

    a sed命令查询信息方法
    根据文件内容的行号进行查询:
    测试1: 显示单行信息
    [root@oldboyedu ~]# sed -n '3p' person.txt
    103,Alex,COO
    测试2: 根据行号信息,输出多行内容(连续)
    [root@oldboyedu ~]# sed -n '1,3p' person.txt
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    测试3: 根据行号信息,输出多行内容(不连续)
    [root@oldboyedu ~]# sed -n '1p;3p' person.txt
    101,oldboy,CEO
    103,Alex,COO

    根据文件内容的信息进行查询:
    测试1: 根据内容信息,输出单行内容
    #将有oldboy行的信息找出来
    [root@oldboyedu ~]# sed -n '/oldboy/p' person.txt
    101,oldboy,CEO

    测试2: 根据内容信息,输出多行内容(连续)
    #将有oldboy到alex行的信息都输出出来
    [root@oldboyedu ~]# sed -n '/oldboy/,/Alex/p' person.txt
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

    测试3: 根据内容信息,输出多行内容(不连续)
    #将有oldboy和alex行的信息都输出出来
    [root@oldboyedu ~]# sed -n '/oldboy/p;/Alex/p' person.txt
    101,oldboy,CEO
    103,Alex,COO
    106,oldboy,CIO

    b sed命令添加信息方法
    在文件第一行添加信息:
    100,oldgirl,UFO
    [root@oldboyedu ~]# sed '1i100,oldgirl,UFO' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    在文件最后一行添加信息:
    [root@oldboyedu ~]# sed '$a108,oldgirl,UFO' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO
    108,oldgirl,UFO

    测试:
    01. 在第三行后面添加oldboy.txt信息
    sed '3aoldboy.txt' person.txt
    02. 在第二行前面添加oldboy.txt信息
    sed '2ioldboy.txt' person.txt
    03. 在有oldboy行的前面添加oldgirl 后面添加olddog信息
    sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt

    [root@oldboyedu ~]# sed -e '/oldboy/ioldgirl' -e '/oldboy/aolddog' person.txt
    100,oldgirl,UFO
    oldgirl
    101,oldboy,CEO
    olddog
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    oldgirl
    106,oldboy,CIO
    olddog

    sed '$a100 101' person.txt 添加多行信息
    企业中编写配置文件:
    IPaddress=10.10.10.1
    mask=255.255.255.0
    gateway=10.10.10.254

    sed '$aIPaddress=10.10.10.1 mask=255.255.255.0 gateway=10.10.10.254' 文件名称

    c sed命令删除信息方法
    练习:
    01. 删除单行信息
    [root@oldboyedu ~]# #删除文件中第三行信息
    [root@oldboyedu ~]# sed '3d' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    02. 删除多行信息
    [root@oldboyedu ~]# #删除文件中第二行到第六行内容
    [root@oldboyedu ~]# sed '2,6d' person.txt
    100,oldgirl,UFO
    106,oldboy,CIO

    测试:
    01. 删除有oldboy信息的行
    sed '/oldboy/d' person.txt

    02. 删除第三行和第六行
    [root@oldboyedu ~]# #删除文件中第二行到第六行内容
    [root@oldboyedu ~]# sed '2,6d' person.txt
    100,oldgirl,UFO
    106,oldboy,CIO

    [root@oldboyedu ~]# sed '3d;6d' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    103,Alex,COO
    104,yy,CFO
    106,oldboy,CIO

    问题: 如何利用sed命令取消空行显示
    [root@oldboyedu ~]# sed -n '/./p' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    [root@oldboyedu ~]# sed '/^$/d' person.txt
    100,oldgirl,UFO
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

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

    d sed命令修改信息方法

    sed 's#原有内容#修改后内容#g' 文件信息
    [root@oldboyedu ~]# sed 's##oldgirl#old#g' person.txt
    sed: -e expression #1, char 12: unknown option to `s'
    [root@oldboyedu ~]# sed 's/#oldgirl/old/g' person.txt
    100,old,UFO

    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    sed 's#()# #g' 文件信息 后项引用前项进行替换修改
    利用sed命令取出IP地址信息:
    第一个历程: 取出有IP地址的行
    [root@oldboyedu ~]# ip a s eth0|sed -n '3p'
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0

    第二个历程: 取出IP地址
    [root@oldboyedu ~]# ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#1#g'
    10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboyedu ~]# ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#1#g'|sed -r 's#(.*)/24.*#1#g'
    10.0.0.200

    sed -r 's#^.*net (.*)#1#g'|sed -r 's#(.*)/24.*#1#g' 进行整合
    ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)/24.*#1#g'

    sed -n '3p'|sed -r 's#^.*net (.*)/24.*#1#g' 进行整合

    sed -n '3 p'
    sed -r 's#^.*net (.*)/24.*#1#g'
    sed -rn '3s#^.*net (.*)/24.*#1#gp'
    最终取IP地址方法
    [root@oldboyedu ~]# ip a s eth0|sed -rn '3s#^.*net (.*)/24.*#1#gp'
    10.0.0.200

    补充01: 修改文件内容直接进行自动备份
    [root@oldboyedu ~]# sed -i.bak 's#oldboy#oldold#g' person.txt
    [root@oldboyedu ~]# ll person.txt.bak
    -rw-r--r--. 1 root root 104 Oct 10 11:40 person.txt.bak
    [root@oldboyedu ~]# cat person.txt.bak
    100,#oldgirl,UFO

    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO

    104,yy,CFO
    105,feixue,CIO
    106,oldboy,CIO

    补充02: 在真实替换文件内容时候,一定不能让n和i参数同时出现
    [root@oldboyedu ~]# sed -ni 's#Alex#aaaa#gp' person.txt
    103,aaaa,COO
    [root@oldboyedu ~]# cat person.txt
    103,aaaa,COO
    说明: ni和参数同时使用,会将文件内容进行清空


    测验替换功能:
    创建测试环境:
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy01.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy02.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy03.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy04.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy05.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy06.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy07.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy08.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy09.txt
    -rw-r--r--. 1 root root 0 Oct 10 02:10 oldboy10.txt
    批量修改文件的扩展名称 将oldboyxx.txt扩展名修改为oldboyxx.jpg

    [root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.*)txt#mv & 1jpg#g'
    mv oldboy01.txt oldboy01.jpg
    mv oldboy02.txt oldboy02.jpg
    mv oldboy03.txt oldboy03.jpg
    mv oldboy04.txt oldboy04.jpg
    mv oldboy05.txt oldboy05.jpg
    mv oldboy06.txt oldboy06.jpg
    mv oldboy07.txt oldboy07.jpg
    mv oldboy08.txt oldboy08.jpg
    mv oldboy09.txt oldboy09.jpg
    mv oldboy10.txt oldboy10.jpg
    mv oldboy.txt oldboy.jpg
    [root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.*)txt#mv & 1jpg#g'|bash

    批量重命名专业命令: rename
    rename .txt .jpg oldboy*.txt
    命令 文件名称需要修改的部分信息 修改成什么信息 将什么样的文件进行修改

    [root@oldboyedu ~]# cat person.txt|sed -i 's#COO#CEO#g'
    sed: no input files
    [root@oldboyedu ~]# sed -i 's#COO#CEO#g' person.txt


    文件中添加内容方法:
    01. vim/vi
    02. cat >>xxx<EOF .. EOF
    03. echo -e "xxx xxx"
    04. sed 'na/i xxxx xxxx sxxxx'


    总结: sed命令的指令信息
    p print 输出信息
    i insert 插入信息,在指定信息前面插入新的信息
    a append 附加信息,在指定信息后面附加新的信息
    d delete 删除指定信息
    s substitute 替换信息 s###g(全局替换)
    c 替换修改指定的一整行信息
    [root@oldboyedu ~]# sed '2coldboyedu-sz-01' person.txt
    103,aaaa,CEO
    oldboyedu-sz-01

  • 相关阅读:
    C++中substr函数的用法
    最小生成树-克鲁斯卡尔模板
    最小生成树-prim算法模板
    1064. 朋友数(20)
    1076. Wifi密码 (15)【模拟】
    二分搜索与二分答案
    HDU 1969 Pie【二分】
    1047. 编程团体赛(20)
    1057. 数零壹(20)
    L2-3. 悄悄关注【STL+结构体排序】
  • 原文地址:https://www.cnblogs.com/huangfeng666/p/12192266.html
Copyright © 2020-2023  润新知