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

最新文章

  1. 初步了解Entity Framework
  2. 向Tiny6410移植QT4.7.0版本
  3. JAVA课程实验报告 实验五 Java网络编程及安全
  4. CentOS 升级内核
  5. .net 4.0 自定义本地缓存策略的不同实现
  6. matlab建立双坐标
  7. oracle 查询最近执行过的 SQL语句
  8. 连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  9. javascript如何判断访问网页的设备及是否支持触屏功能
  10. 添加swagger api文档到node服务
  11. Python之路-Linux命令基础(1)
  12. L1范数与L2范数​
  13. drools规则引擎中易混淆语法分析_相互触发导致死循环分析
  14. VB脚本错误,系统找不到制定的文件 。代码:80070002
  15. 【Java安装】配置环境变量
  16. c sharp dll
  17. centos 中文乱码解决途径
  18. CentOS普通用户没有sudo权限
  19. 。。。。。。不带http https : 不报错 spring boot elasticsearch rest
  20. hadoop学习day3 mapreduce笔记

热门文章

  1. 语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
  2. nodejs下express+ejs环境搭建
  3. Java之final、static关键字及匿名对象
  4. WdatePicker时间插件 有百度云下载 jsp界面选择时间的简单方法
  5. 解决flexpaper读取本地文件问题,JAVA+TOMCAT
  6. EF+linq的增删改查
  7. mysql 存在更新,不存在插入
  8. 火狐浏览器返回不加载JS
  9. css--float浮动
  10. OpenCV2:第八章 界面事件