【问题标题】:How can I append to holdspace from patternspace without inserting a new line into the holdspace using sed?如何在不使用 sed 在保持空间中插入新行的情况下从模式空间追加到保持空间?
【发布时间】:2018-11-21 11:09:55
【问题描述】:

在先将新行附加到保持空间后,sed 命令“H”从模式空间附加到保持空间。

如何在不向保持空间插入新行的情况下追加?

【问题讨论】:

  • 任何时候你发现自己在 sed 中使用了保持空间或模式空间,你就是在使用错误的工具,因为在 1980 年代中期,当 awk 被发明时,该功能已经过时了。 sed 用于 s/old/new,仅此而已,唯一相关的命令是 s、g 和 p(带 -n)。如果您添加 minimal reproducible example 并带有简洁、可测试的示例输入和预期输出,并使用 awk 标记您的问题,那么我们可以向您展示如何以正确的方式做任何您想做的事情。
  • @EdMorton 如果不考虑保持空间,如何使用 g 命令?我认为 sed 在某些情况下可能是正确的工具,不仅适用于 s/old/new/,也许不适合这个。
  • @Hazzard17 你为什么需要谈论holdspace才能使用g?我假设您是在说内部g 使用“保持空间”来做某事。好的,任何人都没有理由知道/关心/谈论它。不,没有其他情况下 sed 是正确的工具 - 无论工作是 awk 解决方案,始终是更清晰、更简单、更高效、更便携、更易于增强/维护等的某种组合。即使我们有一些sed 解决方案在某种程度上“更好”的小众案例,它只是一个小众案例,你最好学习/扩展你的 awk 知识
  • @Hazzard17 如果您想发布一个新问题,该问题需要使用 s、g 和 p 以外的构造的 sed 解决方案,那么我很乐意发布 awk 解决方案相同的问题供您比较。
  • @MoN 我认为这无法做到,至少用一个命令。

标签: sed gnu-sed


【解决方案1】:

有一些技巧,这取决于您的目标。例如,您可以将h 用于第一行,并在每个H 之后或输入末尾删除新行...

为每个附加删除:

seq -w 10 | sed -n 'H;x;s/\n//g;x;${x;p}'

最后删除:

seq -w 10 | sed -n '1h;1!{H};${x;s/\n//g;p}'

诀窍是使用x(交换保持和模式空间的内容)并删除换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多