在Linux命令行中查找并突出显示文本

我正在寻找一个在文本文件中searchstring的linux命令,并在文件中每次出现时高亮显示(颜色),而不是发出文本行(就像grep一样)。

我写了这个方便的小脚本。 它可能会扩展到更好地处理参数

#!/bin/bash if [ "$1" == "" ]; then echo "Usage: hl PATTERN [FILE]..." elif [ "$2" == "" ]; then grep -E --color "$1|$" /dev/stdin else grep -E --color "$1|$" $2 fi 

这对于突出显示正在运行进程的用户来说很有用:

 ps -ef | hl "alice|bob" 

尝试

 tail -f yourfile.log | egrep --color 'DEBUG|' 

DEBUG是您想要突出显示的文本。

我认为你的意思是“不忽略文本行”(而不是排除)。

我知道没有这样的命令,但你可以使用这样的脚本(这是一个简单的解决方案,采用文件名(不含空格)作为第一个参数和搜索字符串(也没有空格)作为第二个):

 #!/usr/bin/env bash ifs_store=$IFS; IFS=$'\n'; for line in $(cat $1); do if [ $(echo $line | grep -c $2) -eq 0 ]; then echo $line; else echo $line | grep --color=always $2; fi done IFS=$ifs_store 

保存为例如colorcat.sh,适当地设置权限(以便能够执行它)并将其称为

 colorcat.sh filename searchstring 

我最近有这样的要求,并捣毁一个小程序来做到这一点。 链接

用法: ./highlight test.txt '^foo' 'bar$'

请注意,这是非常粗糙的,但可以做成一个抛光一般的工具。