Как отображать текст только в скобках - PullRequest
0 голосов
/ 04 октября 2019

журнал выглядит так:

2019/10/04 03:03:12.938 [error]: some exception happened
2019/10/04 03:03:12.938 [error]: some exception happened
2019/10/04 03:53:35.595 [info]: there is a benign error in the code

grep "error" log.txt выдаст мне все три строки, но я хочу только две верхние. Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Вы можете выполнить grep для всех строк, содержащих [error]:

grep '\[error]:' file

Или вы можете использовать awk, чтобы проверить, равно ли третье поле [error]:

awk '$3 == "[error]:"' file

См. онлайн демо

#!/bin/bash
log="2019/10/04 03:03:12.938 [error]: some exception happened
2019/10/04 03:03:12.938 [error]: some exception happened
2019/10/04 03:53:35.595 [info]: there is a benign error in the code"

grep '\[error]:' <<< "$log"
# => 2019/10/04 03:03:12.938 [error]: some exception happened
#    2019/10/04 03:03:12.938 [error]: some exception happened
awk '$3 == "[error]:"' <<< "$log"
# => 2019/10/04 03:03:12.938 [error]: some exception happened
#    2019/10/04 03:03:12.938 [error]: some exception happened
0 голосов
/ 04 октября 2019

Спасибо за ответы выше. Однако проблема в том, что журнал содержит цветовой код для [error] и [info]. В консоли это отображается как [ошибка], а в тексте это фактически [^ [[31merror ^ [[0m]

* Чтобы отключить цветовой код

cat xxx.log | sed 's/\x1b\[[0-9;]*m//g'

Для grep [ошибка]]:

cat xxx.log | sed 's/\x1b\[[0-9;]*m//g' | grep "\[error\]"
0 голосов
/ 04 октября 2019

Попробуйте использовать следующий шаблон:

^.*\[error\]:.*$

Например:

grep "^.*\[error\]:.*$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...