Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236007
  • 博文数量: 49
  • 博客积分: 1035
  • 博客等级: 少尉
  • 技术积分: 477
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 17:23
文章分类

全部博文(49)

文章存档

2015年(15)

2014年(6)

2011年(1)

2008年(3)

2007年(11)

2006年(13)

我的朋友

分类:

2006-04-26 17:49:59

sed 中 n 的用法:将模式空间拷贝于标准输出。用输入的下一行替换模式空间。

执行 n 以后将第一行输出到标准输出以后,然后第二行进入模式空间,根据前面对 G 的解释,会在第二行后面插入一个空行,然后输出;再执行 n 将第三行输出到标准输出,然后第四行进入模式空间,并插入空行,依此类推

相应的:
sed 'n;n;G'     表示在文件的第 3,6,9,12,... 行后面插入一个空行
sed 'n;n;n;G'   表示在文件的第 4,8,12,16,... 行后面插入一个空行
sed 'n;d'       表示删除文件的偶数行

例子:
sed 'n;G;' foo
11111111111111
22222222222222

33333333333333
44444444444444

55555555555555
 
sed '1!G;h;$!d'
sed -n '1!G;h;$p'
         
将文件的行反序显示,相当于 tac 命令(有些平台没有这个命令)

CODE:
$ cat foo
11111111111111
22222222222222
33333333333333

$ sed '1!G;h;$!d' foo
33333333333333
22222222222222
11111111111111

$ sed -n '1!G;h;$p' foo
33333333333333
22222222222222
11111111111111
解释:
sed 中 h 用法:h
The h (hold) function copies the contents of the pattern space into a holding area, destroying any previous contents of the holding area.
意思是将模式空间的内容保存到保持空间中去

sed 中的 d 表示删除模式空间。

1!G表示除了第一行以外,其余行都执行G命令;$!d表示除了最后一行以外,其余行都执行d命令。

看一下sed '1!G;h;$!d'命令执行过程中保持空间与模式空间的变化:

        命令                 保持空间                             模式空间
第一行  h;d     执行前:null        执行后:1111\n                执行前:1111\n 执行后:null
第二行  G;h;d   执行前:1111        执行后:2222\n1111\n          执行前:2222\n 执行后:null         
第二行  G;h     执行前:2222\1111\n 执行后:3333\n2222\n\1111\n   执行前:3333\n 执行后:3333\n2222\n\1111\n
阅读(1686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~