【发布时间】:2018-02-16 08:17:12
【问题描述】:
我想使用 sed 来缩短包含以日期开头的行的日志:
2017-07-26T01:01:01 236
2017-07-27T01:02:01 236
2017-07-27T01:02:51 236
2017-07-27T01:03:01 236
2017-07-28T01:01:01 236
2017-09-07T09:05:18 236
2017-09-07T10:22:10 239
(不,logrotate 不会这样做)。我知道我可以使用
sed -i '0,/^2017-07-27/d' filename
删除第一行之前的所有行(原位),上面有'2017-07-27'和第一行,但如果文件不包含这样的行,或者只有一个这样的行,sed 将删除所有内容。如果找不到模式,我什么都不想做。
我也想原地删除。
如果模式从不匹配,我如何防止 sed 删除所有行? 有没有更好的方法来做到这一点?
【问题讨论】:
-
你想要什么输出?您是否要获取日期列表?
-
不够准确所以应该删除前三行?
-
日志中的记录始终按日期顺序排列。您可以检查日期是否发生并删除
2017-07-27之前的所有记录 -
如解释中所述,给定的命令会删除包含日期的行之前的所有行,以及包含日期的第一行。这是可以接受的,就我而言,是否删除全部或仅删除第一个都没有关系。
-
好的,我自己想通了:sed - STEAM 编辑器,所以,如果文件中没有模式,编辑器将从第一行开始,找不到匹配项并删除。这一直持续到文件的末尾,因为永远不会有匹配!因此答案是:我无法使用 sed 阻止它。期间!
标签: sed