У меня есть файл журнала, который был объединен со stderr, который я пытаюсь очистить.Я могу выделить и найти «загрязнение» stderr, но борюсь с одной незначительной деталью: удаление новой строки
Это отдельный стандартный вывод, который я пытаюсь восстановить:
some message 1234556
more info foo bar
и это объединенный файл stdout / stderr, от которого я пытаюсь избавиться от сообщений stderr:
some message 1234/some/path ERROR
more info only 1 line though
556
more info foo bar
, так что это текст, от которого я пытаюсь избавиться:
/some/path ERROR
more info only 1 line though
включая символы новой строки, чтобы восстановить отдельный стандартный вывод.
Я звоню:
# get rid of the line AFTER the stderr start
sed -i".bak" -e '/ERROR/{n;d}' *.log
# get rid of the start of stderr
sed -i".bak" -r 's/\/some\/path.*ERROR//' *.log
К сожалению, теперь вывод:
some message 1234
556
more info foo bar
Примечаниеточка вставки сообщения stderr может быть произвольной (в середине строки или в начале, где угодно).Единственное, что я могу предположить, это то, что stderr является двухстрочным и начинается с /some/path
и содержит идентификатор ошибки (ERROR
или что-то еще).Кроме того, может быть несколько последующих сообщений stderr, таких как:
some message 1234/some/path ERROR
more info only 1 line though
/some/path ANOTHER_ERR
more info only 1 line though
556
more info foo bar
, которые, я думаю, не представляют большой проблемы (есть только 2 вида, поэтому я могу запустить несколько разных совпадений (ERROR
и ANOTHER_ERR
)).Мне также все равно, какой инструмент используется sed
или awk
...