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

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

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 

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

  • Как сравнить строки в двух файлах
  • Получить номера строк для пустых строк
  • Извлечь строку, если первое поле содержит точку
  • Как удалить повторяющиеся символы?
  • Как я могу манипулировать содержимым файла, дублируя и меняя некоторые части?
  • Объединение строк текста с повторным началом
  • Удалить определенные номера строк (переданные как переменные) из файла в linux
  • Как удалить текст перед разделителем в Linux
  • 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 - лучшая ОС в мире.