代码之家  ›  专栏  ›  技术社区  ›  Josh

SED未检索第二个参数的所有值

  •  1
  • Josh  · 技术社区  · 15 年前

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

    前任: SED-NE'/^2009-08-20/,/^2009-08-26/P'

    然而,我在文件中有2009-08-26的多次事件,我希望它们全部返回,但它只返回第一次。可以全部归还吗?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  4
  •   Vereb    15 年前

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

    解释一下:“e”是一个标签,如果你在这个范围内,你就可以转移到这个标签上。你给了第二次机会,然后检查它是否是范围的终点。如果没有,删除行。

        2
  •  2
  •   mihi    15 年前

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

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

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