分类:
2011-08-30 18:04:37
原创文章,转载请注明出处。
sed实现文件以行翻转,同tac效果
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 —— 自虐并快乐着~~~