Linux (ubuntu) - sed,仅删除文件中的模式匹配

Linux (ubuntu) - sed, removing only pattern match in file

我想读取我在 Linux (ubuntu) 机器上托管的一个游戏的屏幕日志文件。我通过 Web 界面阅读它,我一次只显示 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' | sed 's/[^[:graph:] ]\+//g' | sed -e "s/.\{120\}/&\n/g" | sed -ne':a;$p;N;20,$D;ba'

我尝试使用 sed 来删除那些随机字符,但我所做的只是让事情变得更糟。我真的很想知道是否有办法用这些字符制作一个模式,并且只删除特定的模式而不影响文件的其余部分。

一些 linux 发行版带有实用程序 colorize。如果将它插入到管道中,它可能会有所帮助,尽管它不会删除所有不需要的字符,只会删除转义码:

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