我制作了一个程序,可以从不同的程序读取多个日志,我想对输出中的某些术语进行着色,这样我就可以找到更有趣的部分。 (我不会使用grep
或类似的东西,因为我仍然需要阅读整个日志,我只想将某些有趣的术语设置为不同的颜色以快速找到它们)。
我找到了这个,但同样,这不是我要找的。我正在寻找一种管道文本的方法。
答案1
一定要使用 grep。 Have^
是您的搜索词之一,这样您仍然可以获得每一行(但它将是无色的,除非它包含可见的匹配项)。
例子:
grep -e '[[:upper:]][[:alnum:]]*' -e ^ <<EOF
This Is An
example file.
All lines
in it will be printed, and all
words that start
with a Capital
letter will be Colorized.
EOF
(这使用了heredoc(在shell手册中搜索“Here Documents”)。管道标准输入或真实文件也可以)。
答案2
为了对命令的输出或文件内容进行着色,我可以想到两种可能效果很好的简单方法:
grep
- 也可以显示文件的其余部分,并使用一些高级选项进行多次匹配 - 例如:grep --color -iE 'log|kernel' -C 999 grep --color -iE 'log|kernel|$'
第一个搜索不区分
log
大小写kernel
,并显示周围的 999 行。第二个搜索log
,kernel
以及每行中存在的字符(如建议的这里) 不区分大小写。如需了解更多信息,您可以咨询man grep
是否可用,或阅读手册GNU grep或者OSX grep。python-pygments
- 应该可以通过pip
。可用于语法高亮,它可能有一个词法分析器可用于您想要处理的内容。
另外,对于一般格式化输出,您可以使用ANSI 转义码- 例如:
echo -e "\033[31mred\033[0m"
echo -e "\033[34mblue\033[0m"
这\033
是一个转义字符,之后您可以指定代码来执行不同的操作 - 您也可以指定多个代码:
echo -e "\033[1;31mbold red\033[0m"
echo -e "\033[4;34mblue underlined\033[0m"
答案3
如果您只想任意更改文本颜色,可以使用 ANSI 转义序列来实现。例如,电调[31m会将文本颜色更改为红色,电调[37m会产生白色等。
您可以使用 sed 在流中的特定位置插入某些颜色的转义码。这是某人做这件事的一个例子。
除了更改颜色之外,您还可以执行许多其他屏幕输出操作。这是一个参考。