【问题标题】:sed not retrieving all values for second parametersed 没有检索第二个参数的所有值
【发布时间】:2009-09-13 20:50:45
【问题描述】:

我正在尝试运行命令以从文件中提取一系列日期并打印它们

例如:sed -ne '/^2009-08-20/,/^2009-08-26/p'

但我在文件中多次出现 2009-08-26,我希望所有这些都返回,但它只返回第一个。是否可以全部返回?

谢谢!

【问题讨论】:

    标签: linux sed


    【解决方案1】:

    sed -ne '/^2009-08-20/,/^2009-08-26/b e;/^2009-08-26/b e;d;:e p'

    解释一下:'e' 是一个标签,如果你在这个范围内,你就会跳转到那个标签。你再给一次机会,然后检查它是否是范围的末端。如果不是,请删除该行。

    【讨论】:

    • 嘿,我喜欢那个解决方案。您可以通过使用自动打印省略显式标签和打印来使其更短:sed -e '/^2009-08-20/,/^2009-08-26/b;/^2009-08-26/b;d'
    【解决方案2】:

    它只返回结束日期的第一个匹配的原因是范围从第一个模式的第一个匹配到第二个模式的第一个匹配(包括),然后将停止打印,直到第一个模式出现再次。如果你写第二个模式三遍没有问题,你可以使用

    sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'
    

    如果它在开始日期(包括)和结束日期(不包括)之间将打印一行 - 这就是!确实)或者如果它从结束日期开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2018-03-16
      • 1970-01-01
      • 2019-07-18
      • 2017-02-27
      • 1970-01-01
      相关资源
      最近更新 更多