Обработка файла журнала: укоротить длинные шестнадцатеричные строки - PullRequest
0 голосов
/ 02 мая 2018

У меня есть файл журнала, который трудно прочитать из-за длинных шестнадцатеричных строк (хэши, подписи), и я ищу способ заменить эти строки сокращенной версией.

Пример:

$ cat sample_line
2018-04-17 13:08:03  IO Worker #2 TRACE engine  Handling a valid ConsensusMessage { vote_step: VoteStep { height: 1, view: 1, step: Precommit }, block_hash: Some(c70cd816cd441fda978f6302739892c0877349901c71f1bc9e637159b47989a7), signature: dfc14c535a9cddd861d640310a9d94252aa7d67c330a218312705d26c0d8b8d1670976566754033798d08b6c484470af18e985420f9048c782cd61ea212d416500 }

Я попробовал с sed и сумел сократить подпись:

$ cat sample_line | sed 's/signature: \(.\{6\}\)\w* \(.*\)/signature: \1…\2/'
2018-04-17 13:08:03  IO Worker #2 TRACE engine  Handling a valid ConsensusMessage { vote_step: VoteStep { height: 1, view: 1, step: Precommit }, block_hash: Some(c70cd816cd441fda978f6302739892c0877349901c71f1bc9e637159b47989a7), signature: dfc14c…}

Однако это не очень удачное решение, поскольку оно не очень общее.

Что я хочу:
Команда, которая заменяет любую шестнадцатеричную строку на мин. длина скажем 32 символа с его ведущими 6 символами плюс многоточие. Для данного примера:

2018-04-17 13:08:03  IO Worker #2 TRACE engine  Handling a valid ConsensusMessage { vote_step: VoteStep { height: 1, view: 1, step: Precommit }, block_hash: Some(c70cd8…), signature: dfc14c… }

Этого было бы даже достаточно, чтобы сократить любую строку с мин. длина (поскольку в этом журнале нет других длинных строк).

Я подозреваю, что другие инструменты (awk) лучше подходят для этой задачи.

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете использовать sed. Просто введите первые 6 шестнадцатеричных символов в группу захвата и игнорируйте остальные шестнадцатеричные символы.

$ cat sample_line 
2018-04-17 13:08:03  IO Worker #2 TRACE engine  Handling a valid ConsensusMessage { vote_step: VoteStep { height: 1, view: 1, step: Precommit }, block_hash: Some(c70cd816cd441fda978f6302739892c0877349901c71f1bc9e637159b47989a7), signature: dfc14c535a9cddd861d640310a9d94252aa7d67c330a218312705d26c0d8b8d1670976566754033798d08b6c484470af18e985420f9048c782cd61ea212d416500 }
$ sed -r 's/([a-f0-9]{6})[a-f0-9]+/\1.../g' sample_line 
2018-04-17 13:08:03  IO Worker #2 TRACE engine  Handling a valid ConsensusMessage { vote_step: VoteStep { height: 1, view: 1, step: Precommit }, block_hash: Some(c70cd8...), signature: dfc14c... }
...