有没有一种方法可以在不使用 bashrc/bash_profile 的情况下对命令的输出进行着色?

有没有一种方法可以在不使用 bashrc/bash_profile 的情况下对命令的输出进行着色?

我制作了一个程序,可以从不同的程序读取多个日志,我想对输出中的某些术语进行着色,这样我就可以找到更有趣的部分。 (我不会使用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"

我不确定 OSX 上的支持...你可能需要尝试不同的转义字符- 终端中的颜色可能还需要被启用

答案3

如果您只想任意更改文本颜色,可以使用 ANSI 转义序列来实现。例如,电调[31m会将文本颜色更改为红色,电调[37m会产生白色等。

您可以使用 sed 在流中的特定位置插入某些颜色的转义码。这是某人做这件事的一个例子。

除了更改颜色之外,您还可以执行许多其他屏幕输出操作。这是一个参考。

相关内容