sed(流文本编辑器)
    每次读取一行到模式空间中,
    修改的sed模式空间中的内容,并不会修改源文件,
    继而输出模式空间的内容,
    最后删除模式空间中的内容。

sed [OPTION]... [SCRIPT] [INPUTFILE...]
        -r: 使用扩展的正则表达式
        -n, --quiet, --silent: 不输出模式空间的内容
            例:sed -n '1d' test
                    命令执行过后是空白的,因为不输出模式空间中的内容
                   
        -i: 直接编辑原文件
        -e: -e '' -e '' -e ''
            'CMD1;CMD2;CMD3'
            例:sed -e '1d' -e '2p' test
                    连续执行两条命令,删除第一行,第二行输出两遍
                sed '1d;2p;3=' test
                    连续执行三条命令
                   
        -f /path/to/sed_script: 从指定的文件读取处理脚本
            例:1d;2p;3=
                sed -f 脚本文件 要处理的文本
       
    地址定界:
        #(行号):指定行
            例:sed '1d' test
                    删除第一行                   
                sed '1,10d' /etc/passwd
                    第一行到第十行执行删除命令,即删除前10行
       
        $: 最后一行
            例:sed '$d' test
                    删除最后一行
       
        /regexp/: 任何能够被regexp匹配到的行
            例:sed '/dev/d' test
                    删除包含dev的行
                   
        \%regexp%: 任何能够被regexp匹配到的行,换用%为边界符,边界符是可以被替换的
            例:sed '\%/dev/mapper%d' test
                sed '\@/dev/mapper@d' test
                sed '\#/dev/mapper#d' test
                    删除包含/dev/mapper的行
       
        /regexp/I: 匹配时忽略大小写
            例:sed '/dev/Id' test
                    删除包含dev的行,同时忽略大小写
       
        addr1,addr2:指定范围内的所有行
            0,/regexp/
            #(行号),#(行号)
            /regexp/,/regexp/
            #(行号),+#(行号)
            first~step: 指定起始位置,以及步长1~3
           
            例:sed '1,+2d' test
                    删除第1行及其后边两行,即从第四行开始打印
                sed '1~2d' test
                    从第一行开始删除,且之后间隔两行的也被删除
   
    基本正则表达式元字符:
        字符:.[] [^]
        次数:* \+ \? \{i,j\}
        分组:\(\)
        锚定:^ $ \< \>
        或者:\|
        后向引用:\1 \2
   
    编辑命令:
        注意:命令之前可以使用!表示取反操作
            例:sed '1~2!d' test
                    不删除匹配行
       
        =:显示行号
            例:sed -n '\%/dev/mapper%=' test
                    只显示包含/dev/mapper行的行号,不显示内容
                   
        d: 删除匹配到的行
        p: 打印模式空间中的内容
            通常与-n选项一同使用
            例:sed -n '5,7p' test
                    只打印第5,6,7三行
               
                sed '5,7p' test
                    会打印整个文件,但同时第5,6,7行会被打印两遍
        a \text: 追加字符
            例:sed '1a \bbb' test
                    在第一行后边追加bbb
                   
        i \text:插入文本
            i \text1\ntext2\ntext3 插入多行文本
        c \text:change,把匹配到的行替换为给定的文本,替换整行
            例:sed '3c \bbb' test
                把第三行替换为bbb
               
        s/*/*/: 替换命令
            g: 全局替换
            i: 不区分大小写
            例:sed 's/dev/etc/' test
                    替换dev为etc,且只会替换每行中的第一个dev
               
                sed 's/dev/etc/g' test
                    全局替换dev为etc
   
    练习1:删除/boot/grub/grub.conf文件中所以空白开头的行行首的空白;
       
        sed 's/^[[:space:]]\+//g' /boot/grub/grub.conf
            解析:^[[:space:]]\+ 是正则表达式
                    ^ 行首锚定
                    \+ 匹配其前面的字符至少一次
                   
    练习2:删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符;
        sed 's/^#[[:space:]]\+//' /etc/fstab
       
    练习3:echo一个文件路径给sed命令,取出其基名;取出其目录名;
        # echo "/etc/sysconfig/" | sed 's@[^/]\{1,\}/\?$@@g'

练习4:替换/etc/inittab文件“id:数字:initdefault:”一行中的那个数字为6;
        # sed 's@id:[0-9]:initdefault:@id:6:initdefault@' /etc/inittab

高级编辑命令:
            h: 用模式空间中的内容覆盖保持空间中的内容;
            H:把模式空间中的内容追加至保持空间;
            g: get, 从保持空间取回数据至模式空间,覆盖模式空间中原有的内容;
            G:GET, 从保持空间取回数据至模式空间,追加于模式空间中现有的内容后面;
            x: 把模式空间和保持空间中的内容进行交换;
            n: 读取匹配到的行下一行至模式空间;
            N: 追加读匹配到的行下一行至模式空间;
            d: 删除模式空间中的内容;
            D:删除多行模式空间中首行;

例:sed '1!G;h;$!d' FILE
                执行结果:从行尾到行首,逐行输出
                先取第一行,判断,是第一行,所以不执行G命令,执行h命令,判断,不是最后一行,执行d
                读取第二行,判断,不是第一行,执行G命令,执行h命令,判断,不是最后一行,执行d
                读取第三行,判断,不是第一行,执行G命令,执行h命令,判断,是最后一行,不执行d

显示文件的偶数行:sed -n 'n;p' FILE;     sed -n '2~2p' FILE
            1
            2
            3
            4

显示文件的奇数行:sed -n 'p;n' FILE;     sed -n '1~2;p' FILE

练习:用sed将文件的奇数行与偶数行合并为一行,中间用“&&”隔开;
        # sed '$!N;s@\n@\&\&@g' /etc/issue

练习:说明以下sed命令的意义:
        (1) sed '$!N;$!D' /etc/issue
        (2) sed '$!d' /etc/issue
        (3) sed 'G' /etc/issue
        (4) sed '/^$/d;G' /etc/issue
        (5) sed 'n;d' /etc/issue
        (6) sed -n '1!G;h;$p' /etc/issue

可以参考如下博客,讲的很详细:

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html

流编辑器sed知识点总结的更多相关文章

  1. Shell 基础 -- 流编辑器 sed 详解

    一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...

  2. 流编辑器sed

    sed与grep一样,都起源于老式的ed编辑器,因其是一个流编辑器(stream editor)而得名.与vi等编辑器不同,sed是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑 ...

  3. 快速理解linux流编辑器sed命令

    原创 杜亦舒性能与架构 之前介绍过 awk 命令,sed 命令同样是非常重要的文本处理工具,涉及到linux shell开发时,几乎是避不开这两大利器的 sed 是 stream editor 的简写 ...

  4. shell脚本学习笔记 (流编辑器sed)

    sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不 ...

  5. Linux下的sed流编辑器命令详解

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

  6. SED单行脚本快速参考(Unix 流编辑器)(转)

    sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...

  7. Linux sed 流编辑器

    sed是stream editor的简称,也就是流编辑器.盗用一张图片解释原理 命令格式: SYNPPSIS: sed [OPTION]… {script-only-if-no-other-scrip ...

  8. SED单行脚本快速参考(Unix 流编辑器)

    ------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...

  9. centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课

    centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符  通配符 特殊符号. * + ? 总结  问加星 cat -n  nl  输出文件内容并加上行号 alias放~ ...

随机推荐

  1. python学习day11

    目录 SqlAlchemy 外键 SqlAlechemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象 ...

  2. C#的弱引用

    关于C#中的弱引用 一:什么是弱引用 了解弱引用之前,先了解一下什么是强引用 例如 : Object obj=new Object();     就是一个强引用,内存分配一份空间给用以存储Object ...

  3. 用Eclipse 开发Dynamic Web Project应用程序

    一.创建Server通过菜单选择File > New > Other>Server,创建Server,如下图所示. 二.创建Dynamic Web Project项目 1.菜单选择F ...

  4. Linux 查找bom头文件,清除bom头命令

    1.查找bom头文件 grep -r -I -l $'^\xEF\xBB\xBF' ./ 2.替换bom头文件 find . -type f -exec sed -i 's/\xEF\xBB\xBF/ ...

  5. C#打开office文件,pdf文件和视频文件

    打开office文件 1 需要从网站下载dsoframer.ocx文件 2 把dsoframer.ocx文件复制到c:\windows\system32目录下 开始->运行->regsvr ...

  6. JavaScriptSerializer类序列化日期时需要注意的问题

    1.让我们来看看使用JavaScriptSerializer类序列化日期会出现什么问题? 1)创建用于序列化的测试类,如下: public class Person { public int ID { ...

  7. [转]Ioc容器Autofac

    本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥   前言 第一次接触A ...

  8. [转]SqlServer索引的原理与应用

    索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...

  9. localStorage 和 sessionStorage的区别

    存储对象: 在主流浏览器中,添加了html5  Web Storage API 的接口,storage是一个存储对象,它包括会话存储(session storage)或本地存储(local stora ...

  10. Eclipse集成Maven环境(出现jar的解析或者缺失问题)(或者出现Invalid classpath publish/export dependency /common. Project entries not supported)的统一整理

    在正确配置完Maven,和Maven IntegrationFor Eclipse之后,新建了一个Maven Project 和一个Maven Module,发现新建的Module项目下的pom.xm ...