2

我正在开发一个 tomcat 应用程序,希望能够搜索特定的东西并在查看日志时突出显示它。我想要一个类似于别名的东西,它以参数(正则表达式)作为输入并突出显示匹配的字符串。

到目前为止,我认为这是可行的,但它不够实用,每次我想要新的东西时都必须改变它的一小部分:

tail -n 100 -f /opt/apache-tomcat-6.0.26/logs/catalina.out | perl -pe 's/null/\e[1;31m$&\e[0m/g'

这是我认为可行的:

logColor(){
  x="'s/"
  y="/\e[1;31m$&\e[0m/g'"
  tail -n 100 -f /opt/apache-tomcat-6.0.26/logs/catalina.out | perl -pe $x$1$y
}
alias logC=logColor

我已经测试过这会打印出两条相同的行:

logColorTest(){
  x="'s/"
  y="/\e[1;31m$&\e[0m/g'"
  echo $x$1$y
  echo "'s/null/\e[1;31m$&\e[0m/g'"
}
alias logCT=logColorTest
logCT null

所以我不知道为什么这不起作用,并希望知道它是如何工作的人的意见:)

4

2 回答 2

5

问题grep在于,您只会得到匹配的行,而其他行会被过滤掉。(无论如何,这就是grep应该做的。)然而,很多时候,我们需要所有的输出,但突出显示了一些特定的字符串。

.bashrc对于这样的要求,我有这个小的 bash 函数:

mark () 
{ 
    local searchExpr=${1/\//\\\/};
    sed "s/$searchExpr/"`echo -n -e "\e[91;1m"`'&'`echo -n -e "\e[0m"`'/gi' $2
}

用法:

command | mark some_string # OR
mark some_string some_file

如果需要,重命名为合适的函数名称。

注意:有一个很棒的命令叫做highlight. 因此我不能用它作为我的函数名。

于 2013-10-11T08:39:31.750 回答
5

正如@fedorqui 指出的那样,您可以使用它grep来执行此操作:

grep --colour 'null\|$'

这将匹配并突出显示null或行尾,这意味着显示所有行。

使用GREP_COLORS环境变量,您可以控制不同部分的突出显示方式,例如将匹配的文本标记为黄色:

export GREP_COLORS='ms=1;33'
于 2013-10-11T08:44:18.977 回答