【发布时间】:2009-09-13 20:50:45
【问题描述】:
我正在尝试运行命令以从文件中提取一系列日期并打印它们
例如:sed -ne '/^2009-08-20/,/^2009-08-26/p'
但我在文件中多次出现 2009-08-26,我希望所有这些都返回,但它只返回第一个。是否可以全部返回?
谢谢!
【问题讨论】:
我正在尝试运行命令以从文件中提取一系列日期并打印它们
例如:sed -ne '/^2009-08-20/,/^2009-08-26/p'
但我在文件中多次出现 2009-08-26,我希望所有这些都返回,但它只返回第一个。是否可以全部返回?
谢谢!
【问题讨论】:
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'
它只返回结束日期的第一个匹配的原因是范围从第一个模式的第一个匹配到第二个模式的第一个匹配(包括),然后将停止打印,直到第一个模式出现再次。如果你写第二个模式三遍没有问题,你可以使用
sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'
如果它在开始日期(包括)和结束日期(不包括)之间将打印一行 - 这就是!确实)或者如果它从结束日期开始。
【讨论】: