我想知道我是否可以突出显示匹配某些字符串的shell命令的输出.
例如,如果我运行myCommand,输出如下:
> myCommand
DEBUG foo bar
INFO bla bla
ERROR yak yak
Run Code Online (Sandbox Code Playgroud)
我希望所有符合^ ERROR\s.*的行都突出显示为红色.
同样,我希望同样的突出显示应用于grep的输出,less等...
编辑:我可能应该提到,理想情况下我想通过我的.bashrc中的'profile'选项全局启用此功能.
E.Z*_*.Z. 46
superuser.com上有一个答案:
your-command | grep -E --color 'pattern|$'
Run Code Online (Sandbox Code Playgroud)
要么
your-command | grep --color 'pattern\|$'
Run Code Online (Sandbox Code Playgroud)
这将"匹配您的模式或每行的行尾.只突出显示模式......"
Pau*_*ce. 25
您可以使用以下程序:
你可以做这样的事情,但命令不会看到tty(有些人会拒绝运行或表现不同或做奇怪的事情):
exec > >(histring -fEi error) # Bash
Run Code Online (Sandbox Code Playgroud)
Ben*_*oit 13
你可以尝试(也许需要更多的逃避):
BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 12
如果你想在全球范围内实现这一点,你会想要一个终端功能,而不是一个过程,你管的输出入,因为管道将是破坏性的一些命令(两个问题是输出和错误会出现乱序和缓冲,而某些命令只是表现不同输出到终端时).
我不知道这个功能的任何"传统"终端.它很容易在Emacs做,在一个term
缓冲区:配置font-lock-keywords
了term-mode
.
但是,您应该仔细考虑是否真的想要该功能.如果命令有它自己的颜色(例如grep --color
,ls --color
)?也许最好为colorizer命令定义一个短别名,并myCommand 2>&1|c
在你想要着色myCommand
的输出时运行.您还可以为一些特定的always-colorize命令添加别名.
请注意,管道的返回状态是它的最后一个命令,所以如果你运行myCommand | c
,你将获得状态c
,而不是myCommand
.这是一个避免此问题的bash包装器,您可以将其用作w myCommand
:
w () {
"$@" | c
return $PIPESTATUS[0]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28294 次 |
最近记录: |