繁体   English   中英

使用bash / tail / perl / alias可以轻松突出显示不同的字符串

[英]Using bash/tail/perl/alias for easy highlighting of different strings

我正在开发一个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

所以我迷失了为什么这不起作用,并希望得到知道如何工作的人的意见:)

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 因此我无法将其用作我的函数名称。

正如@fedorqui指出的那样,你可以使用grep来做到这一点:

grep --colour 'null\|$'

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

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

export GREP_COLORS='ms=1;33'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM