【问题标题】:How to print last non-blank line using sed?如何使用 sed 打印最后一个非空行?
【发布时间】:2011-01-31 10:29:37
【问题描述】:

我想使用 sed 从文件中获取最后一个非空行。我能够使用两个流水线 sed 达到预期的结果:

$ echo -e "\n\none\n\ntwo\n\n\nthree\n\n" | sed '/^$/d' | sed -n '$p'
three

但是,我想知道是否可以仅使用一个 sed 命令来获得它。也许通过将每个非空白行一个接一个地复制到缓冲区,覆盖以前的内容并在最后打印缓冲区?我不确定它是否可以在 sed 中完成,这只是我的猜测。

请不要建议我使用 awk、tail 等 - 我只对 sed 感兴趣。谢谢。

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    也许:

    sed -e '/^$/d' -e '$ !d'
    

    ?

    保持缓冲区的其他方式:

    sed -e '/^$/ !h
            $ {x;p;}'
    

    【讨论】:

    • Benoit,我正在寻找第二种使用保持缓冲区的方式。谢谢。
    • 您遗漏了 -n 第二种解决方案。
    【解决方案2】:

    这可能对你有用:

    echo -e "\n\none\n\ntwo\n\n\nthree\n\n" |
    sed '/^$/!h;$!d;g'
    three
    

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 2020-06-08
      • 2015-01-19
      • 1970-01-01
      • 2022-12-20
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多