我正在开发一个tomcat应用程序,并希望能够搜索特定的东西并在查看日志时突出显示它。我想要一个像参数(regex)作为输入的别名,并突出显示匹配的字符串。
到目前为止,我认为这是有效的,但它不够实用,每次我想要新的东西时都要改变它的一小部分:
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
所以我很遗憾为什么这不起作用,并希望得到知道如何工作的人的意见:)
答案 0 :(得分: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
的强大命令。因此我无法将其用作我的函数名称。
答案 1 :(得分:5)
正如@fedorqui所指出的,你可以使用grep
来做到这一点:
grep --colour 'null\|$'
这将匹配并突出显示null
或一行的结尾,这意味着所有行都会显示。
使用GREP_COLORS
环境变量,您可以控制突出显示不同部分的方式,例如将匹配的文本标记为黄色:
export GREP_COLORS='ms=1;33'