Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31377
  • 博文数量: 8
  • 博客积分: 326
  • 博客等级: 二等列兵
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-06 00:35
文章分类

全部博文(8)

文章存档

2012年(5)

2011年(2)

2007年(1)

我的朋友

分类:

2011-08-30 18:04:37

原创文章,转载请注明出处。

sed实现文件以行翻转,同tac效果

shell
  1. xinglu@xinglu-desktop:~/data/shell$ cat > a.txt  
  2. 1  
  3. 2  
  4. 3  
  5. 4  
  6. 5  
  7. 6  
  8. ^C  
  9. xinglu@xinglu-desktop:~/data/shell$  sed -e '1!G;h;$!d' a.txt  
  10. 6  
  11. 5  
  12. 4  
  13. 3  
  14. 2  
  15. 1  

sed基础知识点:
模式空间:sed在处理文件的时候,是每行进行操作,每行读取时都会先将数据保存在一个叫模式空间的临时缓冲区中,默认情况下每行处理完成后,会把模式空间里的值重定向到输出或脚本,接着模式空间被清空;
保存空间:是一个独特的临时缓冲区,通过 G、h、x 与模式空间之间进行操作;
G:从保存空间取值,保存至模式空间;
h:清空保存空间,然后将当前模式空间的值,保存至保存空间;
d:清空当前模式空间;
1!:除了第一行;
$!:除了最后一行。

以a.txt为例,分解 sed -e '1!G;h;$!d'执行流程
第一行,数据1:
模式空间值:1
保存空间值:空
1!G: 不匹配,不进行任何操作
h:匹配,保存空间值:1
$!d:匹配,模式空间值:空
结果:模式空间值:空;保存空间值:1;输出:空

第二行,数据2:
模式空间值:2
保存空间值:1
1!G: 匹配,模式空间值:2 1
h:匹配,保存空间值:2 1
$!d:匹配,模式空间值:空
结果:模式空间值:空;保存空间值:2 1;输出:空

 

第三行,数据3:
模式空间值:3
保存空间值:2 1
1!G: 匹配,模式空间值:3 2 1
h:匹配,保存空间值:3 2 1
$!d:匹配,模式空间值:空
结果:模式空间值:空;保存空间值:3 2 1;输出:空

。。。。。。

第六行,数据6:
模式空间值:6
保存空间值:5 4 3 2 1
1!G: 匹配,模式空间值:6 5 4 3 2 1
h:匹配,保存空间值:6 5 4 3 2 1
$!d:不匹配,模式空间值:6 5 4 3 2 1
结果:模式空间值:6 5 4 3 2 1;保存空间值:6 5 4 3 2 1;输出:6 5 4 3 2 1

shell —— 自虐并快乐着~~~

阅读(637) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~