Я уверен, что кто-то найдет хорошую команду sed
, но я знаю awk
лучше.
Вы можете попробовать:
awk '/Fre --/ && !found++{counter=21}--counter<0' log.log
Пояснения:
/Fre --/
-> если он находит шаблон Fre --
&& !found++
-> и если он не нашел его раньше
{counter=21}
-> он устанавливает значение счетчика в 21 (потому что вы хотите удалить строку + следующие 20 с)
--counter<0
-> уменьшает счетчик и печатает строку только если счетчик <0 </p>
Как указано @Sundeep, @EdMorton solutionбезопаснее для очень больших файлов.
awk '/Fre --/ && !found++{counter=21}!(counter&&counter--)' log.log