Chinaunix首页 | 论坛 | 博客
  • 博客访问: 567266
  • 博文数量: 78
  • 博客积分: 2043
  • 博客等级: 大尉
  • 技术积分: 733
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-26 11:52
文章分类

全部博文(78)

文章存档

2011年(5)

2009年(64)

2008年(9)

分类:

2009-07-25 14:39:14

sed '1!G;h;$!d' filename
... [/quote]
! 放在一个地址或地址范围后,表示只对符合该地址或地址范围的行才执行!后的命令。(地址或地址范围是匹配行的条件)
1 表示文件第一行
$ 表示文件最后一行

1!G 表示第一行不执行G(hold space附加到pattern space),即2到$执行G
h 复制pattern space的内容到hold space
$!d 最后一行($表示最后一行)不执行d, 即1到$-1执行d。d用来删除当前pattern space内容,并开始下一次循环去处理下一行。

1 第一行时,执行h把pattern space的内容(第一行的内容)复制到hold space;
执行d删除pattern space的内容,并开始下一次循环,
2 第二行至倒数第二行,先执行G把hold space的内容附加到pattern space(当前行),这样pattern space的内容就是前面所有行的内容加上当前行的内容(倒序的);
再执行h, 把pattern space的内容复制到hold space;
然后执行d删除pattern space的所有内容,开始下次循环。
3 最后一行,执行G;h(同2),但不执行d,执行默认输出动作输出pattern space的内容。
阅读(1370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~