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

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

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 нет шаблона.

Это блок, который я хочу удалить:

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

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

  • Повторить слова, разбитые символами дефиса и двойной символа новой строки
  • Как сравнить строки в двух файлах
  • Каким образом можно извлечь сегмент из текстового файла?
  • Показать символ в позиции в файле
  • Как написать данные отдельно во многих текстовых файлах, содержащих одни и те же поля?
  • Количество вхождений в текстовом файле, где первый символ после 12-го канала равен 1?
  • Перенести первые N строк вывода в конец без использования временного файла
  • Как заменить все вкладки в каждом файле в ветке файловой системы на 2 пробела?
  • 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 - лучшая ОС в мире.