Linux (ubuntu) - sed, удаляя только совпадение с образцом в файле - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу прочитать файл журнала экрана для одной из игр, которые я размещаю на компьютере с Linux (Ubuntu).Я читаю его через веб-интерфейс и отображаю только 20 строк за раз, так как это будет слишком большим для моего собственного комфорта.Тем не менее, файл журнала продолжает получать спам со случайными символами.Обратите внимание, что это происходит только с этой конкретной игрой.

Вот пример:

;1m[34m[47m\[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m|[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m/[24d[m[39;49m[37m[40m[1d[0;1m[34
m[47m-[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m\[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m|[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m/
[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m-[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m\[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m|[24d[m
[39;49m[37m[40m[1d[0;1m[34m[47m/[1;58H[0m[30m[47m1[24;3H[m[39;49m[37m[40m[1d[0;1m[34m[47m-[24d[m[39;49m[37m[40m[1d[0;1m[
34m[47m\[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m|[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m/[24d[m[39;49m[37m[40m[1d[0;1m[34m[47
m-[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m\[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m|[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m/[24d
[m[39;49m[37m[40m[1d[0;1m[34m[47m-[24d[m[39;49m[37m[40m[1d[0;1m[34m[47m\[24d[m[39;49m[37m[40m

Вот код, который я сейчас использую.Он удаляет ненужные пробелы, добавляет новую строку после 120 символов и отображает только последние 20 строк файла.

tail /srv/screenlog.0 | awk '{$1=$1};1' | sed 's/[^[:graph:] ]\+//g' | sed -e "s/.\{120\}/&\n/g" | sed -ne':a;$p;N;20,$D;ba'

Я попытался поиграть с sed, чтобы удалить эти случайные символы, но все, что я сделалбыло хуже.Я действительно хочу знать, есть ли способ сделать шаблоны из этих символов и удалить только определенные шаблоны, не затрагивая остальную часть файла.

1 Ответ

0 голосов
/ 19 февраля 2019

Некоторые дистрибутивы Linux поставляются с утилитой colorize.Если вы вставите его в свой конвейер, это может помочь, хотя и не удалит все ненужные символы, а только escape-коды:

tail /srv/screenlog.0 | colorize --clean-all | awk ...
...