有人能帮我破解这个sed命令吗?

有人能帮我破解这个sed命令吗?,sed,Sed,我在unix论坛上发现了这个神奇的命令,可以将文件的最后一行移到文件的开头。我经常使用sed,但没有达到这个程度。有人能给我解释一下每一部分吗 sed '1h;1d;$!H;$!d;G' infile 是的,它使用奇异的命令 1h:将第一行放入“保持”空间(sed有2个空间:1个保持空间用于保存数据,模式空间:实际处理的行) 1d:删除第一行 美元!H:将除最后一行(以及自d命令跳到下一行后的第一行)以外的所有行追加到“保持”空间 美元!d:删除(不打印)除最后一行以外的所有行 G:在模式空

我在unix论坛上发现了这个神奇的命令,可以将文件的最后一行移到文件的开头。我经常使用sed,但没有达到这个程度。有人能给我解释一下每一部分吗

sed '1h;1d;$!H;$!d;G' infile

是的,它使用奇异的命令

  • 1h:将第一行放入“保持”空间(sed有2个空间:1个保持空间用于保存数据,模式空间:实际处理的行)
  • 1d:删除第一行
  • 美元!H:将除最后一行(以及自d命令跳到下一行后的第一行)以外的所有行追加到“保持”空间
  • 美元!d:删除(不打印)除最后一行以外的所有行
  • G:在模式空间的内容中添加一个换行符(这是最后一行,是唯一能够到达脚本这一部分的换行符),然后将保留空间的内容添加到模式空间的内容中,即立即打印的模式空间。交换完毕
基于意见的评论:我必须承认,我从来没有想过使用
sed
,我必须做一个测试来说服我这个命令在做什么。。。在
awk
中,这样做要容易得多。 但是
sed
在我心中有一个特殊的位置,那就是它的神秘命令。我想知道是否有一些
sed
CodeGolf:)

  • 参考手册:
  • 你可以用sed做一些异国情调的事情(我最喜欢的1999年读物):

以下是一个程序化伪代码中的相同命令:

对于内嵌中的行:
#始终执行此操作:将当前行复制到图案
图案=线条
#处理脚本
如果第一行:
保持=模式#1h
模式=”;继续#1d
如果不是最后一行:
hold=hold+“\n”+模式#$!H
模式=”;继续#$!D
模式=模式+“\n”+保持#G
#始终在脚本完成后执行此操作。
#由于上面的continue语句,此
#不总是能联系到,在这种情况下
#只能到达最后一行。
印刷图案
  • d
    清除模式空间并继续下一输入行,而不执行脚本的其余部分

  • h
    将图案空间复制到保留空间

  • H
    将换行符追加到保留空间,然后将图案空间追加到保留空间
  • G
    类似于
    H
    ,但方向相反;它将保持空间复制到图案空间

对具有N行的文件的总体影响是在保留空间中建立第1行到第N-1行的副本。当图案保留第N行时,将保留空间附加到图案空间,并将图案空间打印到标准输出。

从这里开始:
man sed
info sed
是解开魔法的良好起点。如果在阅读帮助后您仍然无法理解此命令的作用,请询问aagin。