【发布时间】:2016-02-11 08:27:26
【问题描述】:
我正在尝试编写一个sed 脚本来获取包含模式的所有行并将它们移动到输出的末尾。这是一个学习保持与模式空间的练习,我正在努力想出它(尽管我感觉很接近)。
我在这里:
$ echo -e "hi\nfoo1\nbar\nsomething\nfoo2\nyo" | sed -E '/foo/H; //d; $G'
hi
bar
something
yo
foo1
foo2
但我希望输出是:
hi
bar
something
yo
foo1
foo2
我明白为什么会这样。这是因为我们第一次找到 foo 时,保留空间是空的,所以 H 将 \n 附加到空白保留空间,然后是第一个 foo,我认为这很好。但随后 $G 又做了一次,即另一个追加,它将\n 加上保持空间中的内容添加到模式空间。
我尝试了使用/^$/d 的最终删除命令,但没有删除空行(我认为这是因为该模式不是与最后一行匹配,而是与现在的多行模式空间匹配\n\n 在里面。
我确信sed 大师们有解决我的问题。
【问题讨论】:
-
您为什么不发布您的解决方案作为答案?这实际上在这里受到鼓励。
标签: sed