Welcome 微信登录

首页 / 操作系统 / Linux / sed D循环之反向输出

说明:蓝色=命令名称      浅绿=命令参数      浅蓝=选项      紫色=目录      系统环境:CentOS  6.2  x86_64需求:将 I love linux ! 反向输出 :! linux love I方法:echo "I love linux !" |sed "/ /!G;s/([^ ]* )(.* )/&21/;//D;s/ / /" 650) this.width=650;" border=0>解析:此方法关键在 D 参数。D 删除模式空间中的第一行(确切的说应该时第一部分),如果删除后,模式空间中还有剩余行,则返回 D 之前的命令,重新执行,如果 D 后,patten space 中没有任何内容,则将退出 sed命令,将控制权交给 sed,在没有 -n 参数时,sed 会输出 pattern space 中的内容,如果最后一行没有被读入,则 sed 继续读入下一行,并去掉结尾的 放到 pattern space 中,继续执行 sed 命令如果最一行已经读入,则退出 sed。

D 命令会引起循环,如果 D 被执行,那么 D 后面的命令是不会被执行的。第一次"/ /!G;"没有 换行符,要执行G,因为保留空间中为空,所以在模式空间追加一空行,此时内容为
模式空间第一部分:I love linux !
模式空间第二部分:null
执行后面的替换 “s/([^ ]* )(.* )/&21/;”
模式空间第一部分:I love linux !
模式空间第二部分:love linux ! I
模式空间第三部分:null
执行 ”//D; “//匹配空行执行D删除模式空间第一部分
模式空间第一部分:love linux ! I
模式空间第二部分:null
因为还有内容,返回前面命令

第二次"/ /!G;"有 不执行,内容不变
模式空间第一部分:love linux ! I
模式空间第二部分:null
执行后面的替换 “s/([^ ]* )(.* )/&21/;”
模式空间第一部分:love linux !
模式空间第二部分:linux ! love I
模式空间第三部分:null
执行 ”//D; “//匹配空行执行D删除最上一行
模式空间第一部分:linux ! love I
模式空间第二部分:null
因为还有内容,返回前面命令

第三次"/ /!G;"有 不知行,内容不变
模式空间第一部分:linux ! love I
模式空间第二部分:null
执行后面的替换 “s/([^ ]* )(.* )/&21/;”
模式空间第一部分:linux !
模式空间第二部分:! linux love I
模式空间第三部分:null
执行 ”//D;“ //匹配空行执行D删除最上一行
模式空间第一部分:! linux love I
模式空间第二部分:null
因为还有内容,返回前面命令

第四次"/ /!G;"有 不知行,内容不变
模式空间第一部分:! linux love I
模式空间第二部分:null
执行后面的替换 “s/([^ ]* )(.* )/&21/;” 因为!后面没有空格所以不匹配,不执行
模式空间第一部分:! linux love I
模式空间第二部分:null
执行 ”//D;“ //匹配空行执行D删除最上一行
模式空间:null

此时模式空间中为空结束循环,此时若没有 ”s/ / / “则应该打印
! linux love I因为有”s/ / / “,所以再此处将! linux love I作为”s/ / / “的输入内容,执行替换,最后结果
! linux love Iawk数组嵌套筛选数据CentOS 6 Setup 安装相关资讯      sed 
  • Linux 管理员都应该会的命令:sed   (01月13日)
  • Linux正则表达式sed 详述  (04/16/2015 15:19:04)
  • shell中sed和awk的一些用法和例子  (02/03/2015 11:52:34)
  • sed 命令详解  (11/15/2015 10:16:53)
  • sed一些参数的用法  (04/16/2015 15:05:09)
  • sed命令详解与示例  (11/12/2014 19:21:48)
本文评论 查看全部评论 (0)
表情: 姓名: 字数