Как удалить текстовые блоки в файле журнала?

У меня есть следующий журнал:

2016/01/20 00:00:16.035 [T114BaseServlet] ... Blah Blah Blah 2016/01/20 00:00:16.036 [ApplicationState] ... Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 2016/01/20 00:00:29.531 [T114BaseRequestPayloadParser] ... Blah Blah Blah 2016/01/20 00:00:36.036 [ApplicationState] ... Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 

Я хочу удалить эти строки ApplicationState , но в конце этих Blah Blah Blah нет шаблона.

  • дата: получить текущий 15-минутный интервал
  • Какие команды я могу использовать в терминале, чтобы найти программу, которая делает конкретную вещь?
  • Запуск сценария python с терминала без расширения .py
  • Unix - поиск имен с egrep
  • копирование файлов с определенными именами в другую папку
  • Получить информацию о файле .avi из командной строки
  • Это блок, который я хочу удалить:

     2016/01/20 00:00:16.036 [ApplicationState] ... Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah 

    перед тем, как начнется следующий запрос.

  • Получить список подкаталогов, содержащих файл, соответствующий строке
  • Каким образом можно извлечь сегмент из текстового файла?
  • Отправка файла в виде электронного письма
  • Получить список установленных принтеров
  • Как сжать файлы на месте?
  • Печать текста с терминала
  • 2 Solutions collect form web for “Как удалить текстовые блоки в файле журнала?”

    Чтобы удалить весь блок строк, начиная с одного из них, включая совпадение до строки, [T1114Base место непосредственно перед следующим [T1114Base вы можете сделать следующее:

     sed -e'$!N;/ApplicationState.*\n/,/\n.*\[T1114Base/!P;D' <in >out 

    Довольно просто понять, как это работает. По умолчанию sed ест вводит строку за раз. Но если вы хотите более широкий внешний вид, вам нужен только сценарий.

    Поэтому для каждой входной линии, если ток есть ! а не $ last, sed добавляет строку N ext к пространству шаблонов, как ограниченный перемещающимся символом \n ewline.

    В выражении диапазона я сначала ищу любое соответствие для ApplicationState за которым следует любое * число любого . символов, за которыми следует, по крайней мере, один \n ewline. Чтобы закончить выражение диапазона, мне нужно заглянуть в исходный код, который является целью $!N в первую очередь. sed сканирует следующее появление строки, которая будет появляться после последнего удаления. Он ищет \n ewline, за которым следует шаблон, который должен соответствовать началу следующего входного блока.

    Если это выражение диапазона ! не соответствует, sed будет иметь значение до первого встречающегося \n ewline в пространстве шаблонов, и независимо от совпадения sed после этого будет сгенерирован до первой встречной новой строки в пространстве шаблонов и переработает вершину скрипта с тем, что осталось.

    В основном, sed перемещается по входным двум строкам за раз, возможно, P ставит старую самую, если она не встречается в вашем блоке удаления, и всегда D группирует только самую старую до добавления N ext.

    Вы на самом деле пытались?

    Предполагая, что вы хотите удалить всю строку:

     sed '/ApplicationState/d' inputfile 
    Linux и Unix - лучшая ОС в мире.