zoukankan      html  css  js  c++  java
  • Sed的简单用法

    Sed的简单用法

    欢迎来到 来到大浪涛天的博客

    提到sed很多人都不会陌生,它和grep,awk合称为文本编辑的三剑客,而且排行老二,所以它的强大不言而喻,当然言归正传,sed在文本编辑中的增删改查确实十分方便易用,用好了对之后的工作能提升很高的效率

    Sed的简单用法

    1. sed命令概述说明:

    • sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功能不同凡响。
    • 处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space)。
    • 接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
    • 接着理下一行,这样不断重复,直到文件末,内容没有改改变,除非使用了写入的命令,将内容更新。
    • 定址用于决定对哪些行进行编辑。
    • 地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
    • sed命令属于字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作

    2. sed命令作用说明:

    • 擅长对行进行操作处理
    • 擅长将文件的内容信息进行修改调整/删除
    • 文件中添加信息的能力 (增) ok
    • 文件中删除信息的能力 (删) ok
    • 文件中修改信息的能力 (改)
    • 文件中查询信息的能力 (查) OK

    3. sed命令的语法信息

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

    4. sed命令实践操作:

    • 创建测试环境:
    cat >person.txt<<EOF
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    EOF	

    4.1 sed命令查询信息方法

    4.1.1 根据文件内容的行号进行查询:

    • 显示单行信息
    [root@oldboyedu ~]# sed -n '3p' person.txt 
     103,Alex,COO
    • 根据行号信息,输出多行内容(连续)
    [root@oldboyedu ~]# sed -n '1,3p' person.txt 
     101,oldboy,CEO
     102,zhaoyao,CTO
     103,Alex,COO
    • 根据行号信息,输出多行内容(不连续)
    [root@oldboyedu ~]# sed -n '1p;3p' person.txt 
    101,oldboy,CEO
    103,Alex,COO

    4.2 根据文件内容的信息进行查询:

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

    4.3 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

    4.4 测试在文件后面添加信息:

    • 在第三行后面添加oldboy.txt信息
      sed '3aoldboy.txt' person.txt
    • 在第二行前面添加oldboy.txt信息
      sed '2ioldboy.txt' person.txt
    • 在有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

    4.5 在文件中添加多行信息

    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' person.txt

    4.6 sed命令删除信息方法

    • 删除单行信息
    	[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
    • 删除多行信息
        [root@oldboyedu ~]# #删除文件中第二行到第六行内容
        [root@oldboyedu ~]# sed '2,6d' person.txt 
        100,oldgirl,UFO
        106,oldboy,CIO
    • 删除有oldboy信息的行
      sed '/oldboy/d' person.txt
    • 删除文件中第二行到第六行内容
        [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
    • 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地址信息:
    [test@test03 ~]$ ip a s eth0|sed -rn 's#^.*t (.*)/.*#1#gp'
    10.211.55.3
    • 修改文件内容直接进行自动备份
    [test@test03 ~]$ sed -i.bak 's#old#new#g' test
    [test@test03 ~]$ ls
    test  test.bak
    • 在真实替换文件内容时候,一定不能让n和i参数同时出现
        [root@oldboyedu ~]# sed -ni 's#Alex#aaaa#gp' person.txt
        103,aaaa,COO
    	[root@oldboyedu ~]# cat person.txt
        103,aaaa,COO
    	说明: ni和参数同时使用,会将文件内容进行清空
    • 批量重命名,把test.txt重命名为test.jpg
    [test@test03 test]$ touch test{1..3}.txt
    [test@test03 test]$ ls test* |sed -r 's#(test.*)txt#mv 1txt 1jpg#g' |bash
    [test@test03 test]$ ls
    test1.jpg  test2.jpg  test3.jpg
    [test@test03 test]$ ls test*|sed -r 's#(.*)jpg#mv & 1txt#g'|bash
    [test@test03 test]$ ls test*|sed -r 's#(.*)txt#mv 1txt 1jpg#g'|bash   
    [test@test03 test]$ ls
    test1.jpg  test2.jpg  test3.jpg
    • 专业的重命名工具:rename
    rename   .txt         .jpg        oldboy*.txt
    命令     需要修改的部分  改成的部分    需要修改的文件

    例如:

    [test@test03 test]$ rename .jpg .txt test*.jpg
    [test@test03 test]$ ls
    test1.txt  test2.txt  test3.txt	

    4.7 文件中添加内容方法:

    1. vim/vi
    2. cat >>xxx<EOF .. EOF
    3. echo -e "xxx xxx"
    4. sed 'na/i xxxx xxxx sxxxx'

    5. sed小结

    • 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
    • sed命令的参数小结
        -n  取消默认输出
        -r  识别扩展正则
        -i  真实编辑文件(将内存中的信息覆盖到磁盘中)	
    	-e  识别sed命令多个操作指令
  • 相关阅读:
    (一)Kubernetes 系统基础
    Linux-网络RAID技术DRBD
    Linux-存储服务之NFS
    ELK快速入门(五)配置nginx代理kibana
    ELK快速入门(四)filebeat替代logstash收集日志
    ELK快速入门(三)logstash收集日志写入redis
    渗透测试工具集合
    CVE-2019-0708(非蓝屏poc)远程桌面代码执行漏洞复现
    代码审计-thinkphp3.2.3框架漏洞sql注入
    渗透测试-端口复用正向后门
  • 原文地址:https://www.cnblogs.com/chacha51/p/13764838.html
Copyright © 2011-2022 走看看