曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3285|回复: 0
打印 上一主题 下一主题

H 与 x 命令

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-2-3 10:40:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
H 命令将 pattern space 的内容追加到 hold space ,它们由换行符(\n)隔开。

x 命令将 hold space 的内容和 pattern space 的内容互换。

下面的例子使用 H 命令和 x 命令打印一个含有某匹配的段落。供测试用文本内容如下:
[beyes@beyes   sed]$ cat tmp.txt
#beyes
        groad.net
        baidu.com
        sina.com

#linux
        linux
        kernel

#Windows
        win7
        groad.net
        winXP
下面,我们将打印出含有 groad 的段,运行命令如下:
[beyes@beyes   sed]$ sed -e '/./{H;$!d;}' -e 'x;/groad/!d' tmp.txt

#beyes
        groad.net
        baidu.com
        sina.com

#Windows
        win7
        groad.net
        winXP
'/./{H;$!d;}' 这条命令组里,首先会检测该行是否为空行,如果不是,那么 H 命令将已读入到 pattern space 的内容追加到 hold space 中,接着查看该行是不是最后一行,如果不是,那么就将该行从 pattern space 中删除掉,然后重新启动命令循环(d 命令)。注意,因为刚开始时,hold space 里是没有内容的,也就相当于有一个空行在其中,那么第一行 #beyes 追加进去后就内容就变成了:(空行)\n#beyes 。这也就是输出中会看到第一行是条空白行的原因。

如果在执行命令时遇到一个空行,那么就会执行 'x;/groad/!d' 这个命令组,此时的情况也就是碰到了一个段落。x 命令时交换 hold space 和 pattern space 内容的,所以之前在 hold space 中读入的段落将被替换到 pattern space 中,然后会检查一下该段落中是否含有 groad 字样,若是没有则删除掉整个段落,有则会被输出来。

上面所述即是一个段落的处理过程,其余段落同理处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-15 11:51 , Processed in 0.076498 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表