• sed工具


            SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本,与VIM编辑器类似,它一次处理一行内容,Sed可以编辑一个或多个文件,简化对文件的反复操作、编写转换程序等。

            在处理文本时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),紧接着用SED命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出至屏幕或者写入文件。逐行处理直到文件末尾,然而如果打印在屏幕上,实质文件内容并没有改变,除非你使用重定向存储输出或者写入文件。

    1.其语法格式为:

    sed    [-Options]     [‘Commands’]    filename;
    sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改,需要加-i参数即对文件彻底修改;

    2.参数格式为:

    x                   #x为指定行号;
    x,y                 #指定从x到y的行号范围;
    /pattern/           #查询包含模式的行;
    /pattern/pattern/   #查询包含两个模式的行;
    /pattern/,x         #从与pattern的匹配行到x号行之间的行;
    x,/pattern/         #从x号行到与pattern的匹配行之间的行;
    x,y!                #查询不包括x和y行号的行;
    r                   #从另一个文件中读文件;
    w                   #将文本写入到一个文件;
    y                   #变换字符;
    q                   #第一个模式匹配完成后退出;
    l                   #显示与八进制ASCII码等价的控制字符;
    {}                  #在定位行执行的命令组;
    p                   #打印匹配行;
    =                   #打印文件行号;
    a                  #在定位行号之后追加文本信息;
    i                  #在定位行号之前插入文本信息;
    d                   #删除定位行;
    c                  #用新文本替换定位文本;
    s                   #使用替换模式替换相应模式;
    n                   #读取下一个输入行,用下一个命令处理新的行;
    N                   #将当前读入行的下一行读取到当前的模式空间。

    3.常用SED工具企业演练案列:

    例1:替换jfedu.txt文本中old为new:

    sed    's/old/new/g'       jfedu.txt

    例2:打印jfedu.txt文本第一行至第三行:

    sed    -n '1p;$p'           jfedu.txt

    例3: 打印jfedu.txt文本中第一行与最后一行:

    sed    -n '1p;$p'           jfedu.txt

    例4: 删除jfedu.txt第一行至第三行、删除匹配行至最后一行:

    sed       '1,3d'             jfedu.txt
    sed       '/jfedu/,$d'         jfedu.txt

    例5: 删除jfedu.txt最后6行及删除最后一行:

    for   i  in `seq 1 6`;do  sed  -i   '$d'  jfedu.txt ;done
    sed       '$d'               jfedu.txt

    例6:删除jfedu.txt最后6行:

    sed       '$d'             jfedu.txt

    例7: 在jfedu.txt查找jfedu所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:

    sed    '/jfedu/aword'      jfedu.txt

    例8:在jfedu.txt查找jfedu所在行,并在其上一行添加word字符,i表示在其上一行添加字符串:

    sed    '/jfedu/iword'       jfedu.txt

    例9:在jfedu.txt查找以test结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:

    sed   's/test$/&word/g'     jfedu.txt

    例10:在jfedu.txt查找www的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:

    sed   '/www/s/^/&word/'    jfedu.txt

    例11:多个sed命令组合,使用-e参数:

    sed  -e  '/www.jd.com/s/^/&1./'  -e  's/www.jd.com$/&./g'  jfedu.txt

    例12: 多个sed命令组合,使用分号“;”分割:

    sed  -e  '/www.jd.com/s/^/&1./;s/www.jd.com$/&./g'  jfedu.txt

    例13: Sed读取系统变量,变量替换:

    WEBSITE=WWW.JFEDU.NET
    Sed  “s/www.jd.com/$WEBSITE/g” jfedu.txt

    例14:修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行:

    sed  -i   '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
    sed  -i   '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config

    例15:合并上下两行,也即两行合并:

    sed    'N;s/
    / /'            jfedu.txt
  • 相关阅读:
    [Leetcode]-- Largest Rectangle in Histogram
    Trapping Rain Water
    JNI和JNA性能比较
    Visual Studio开发Linux程序的方法
    Linux查看机器的硬件信息
    各语言的代码混淆工具
    类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast区别
    内存泄露的监测工具
    我们三十以后才明白
    我们三十以后才明白
  • 原文地址:https://www.cnblogs.com/deny/p/10001005.html
Copyright © 2020-2023  润新知