我正在尝试运行命令从文件中提取一系列日期并打印它们
前: sed -ne'/ ^ 2009-08-20 /,/ ^ 2009-08-26 / p'
然而我在文件中有多次出现2009-08-26,我希望所有这些都返回,但它只返回第一个。是否有可能获得所有回报?
谢谢!
答案 0 :(得分:4)
sed -ne'/ ^ 2009-08-20 /,/ ^ 2009-08-26 / b e; / ^ 2009-08-26 / b e; d;:e p'
解释:'e'是一个标签,如果你在该范围内,你会分支到该标签。你给第二次机会,然后检查它是否是范围的结束。如果没有,请删除该行。
答案 1 :(得分:2)
它仅返回结束日期的第一个匹配的原因是范围从第一个模式的第一个匹配到第二个模式的第一个匹配(包括),然后将停止打印,直到第一个模式发生再次。如果您在编写第二个模式三次时没有问题,可以使用
sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'
如果在开始日期(包括)和结束日期(不包括)之间将打印一行 - 这就是!确实如果它从结束日期开始。