使用 sed 获取某个日期之前的所有行,除了最后一个匹配行

使用 sed 获取某个日期之前的所有行,除了最后一个匹配行

我需要使用 sed 从文件中获取行,但我不希望打印最后一行。我应该在这个命令中添加什么来做到这一点?

sed "/$START_DATE/q" user.log>test2.log

答案1

如果您有 GNU sed,则可以替换qQ

Q [退出代码]

This command accepts only one address.

This command is the same as q, but will not print the contents of pattern space.

所以sed "/$START_DATE/Q" user.log>test2.log


否则,您可以关闭默认打印并在显式退出之前打印这些行:

sed -n '/Line 10/q; p'

答案2

如果感觉更直观,您可以sed向管道添加第二个管道,其唯一的工作是删除最后一行(与上一个/现有的匹配sed):

sed "/$START_DATE/q" user.log | sed '$d' > test2.log

相关内容