商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
信箱 E杂志
您的位置:首页 > 服务器专区 > 正文       

用sed实现文件反转

作者:网络 佚名  2007-07-12   

    【IT168 服务器学院问题:如何反转文件:
    为了方便讨论我们假定我们要反转的文件a.txt内容如下(三行):
    hello
    world
    sed

    解决:
    sed -e '1!G;h;$!d' a.txt > b.txt

    解释如下:
    实现的思想有些别扭:把保留空间(临时缓冲区)的内容附接到当前行的模式空间,删除当前行模式空间,如此往复,直到最后一行,到最后一行的时候不删除当前模式空间,最后输出模式空间。

    命令:
    上述sed命令'1!G;h;$!d',用分号隔开三个子命令G, h, d,应用于每一行的分析, G表示把缓冲区内容附接到当前模式空间中,h表示将模式空间的内容保存到缓冲区中, d表示删除模式空间。

    地址:
    我们看到G命令与d命令前面都有前缀,分别是1!和$!,这表示命令的有效的范围。
    1!G表示除了第一行外都执行G命令,$!d表示除了最后一行外都执行d命令。
    (举一反三:1G表示只有第一行才执行G命令,$d表示只有最后一行才执行d命令)。

    处理过程:
    好了,处理过程涉及的命令以及命令的有效范围我们都清楚了,就可以看看命令的执行过程以及处理过程缓冲区空间和模式空间的变化:

    命令 缓冲区 模式空间
    1行 h;d 前(null) 后hello\n 前hello\n 后(null)
    2行 G;h;d 前hello\n 后world\nhello\n 前world\n 后(null)
    3行 G;h 前world\nhello\n 后sed\nworld\nhello\n 前sed\n 后sed\nworld\nhello\n

    说明:前表示分析前,后表示分析后。

 

1
有问必答
【内容导航】
第1页:用sed实现文件反转
©版权所有。未经许可,不得转载。
[责任编辑:服务器学院01] [我要挑错]
相关产品
本文相关产品
   没有相关产品