我发现 grep 的 --color=always 标志非常有用 . 但是,grep只打印带匹配的行(除非您要求上下文行) . 鉴于它打印的每一行都有匹配,突出显示不会增加尽可能多的功能 .
grep
--color=always
我真的很喜欢 cat 一个文件,并看到整个文件突出显示模式匹配 .
cat
有什么方法我可以告诉grep打印正在读取的每一行,无论是否匹配?我知道我可以编写一个脚本来在文件的每一行上运行grep,但我很好奇这是否可以使用标准的 grep .
使用 colout 程序:http://nojhan.github.io/colout/
colout
它旨在为文本流添加颜色突出显示 . 给定正则表达式和颜色(例如“红色”),它再现具有突出显示的匹配的文本流 . 例如:
# cat logfile but highlight instances of 'ERROR' in red colout ERROR red <logfile
您可以链接多个调用以添加多个不同的颜色突出显示:
tail -f /var/log/nginx/access.log | \ colout ' 5\d\d ' red | \ colout ' 4\d\d ' yellow | \ colout ' 3\d\d ' cyan | \ colout ' 2\d\d ' green
或者你可以使用带有N组的正则表达式(正则表达式的括号部分),然后是逗号分隔的N种颜色列表来实现相同的功能 .
vagrant status | \ colout \ '\''(^.+ running)|(^.+suspended)|(^.+not running)'\'' \ green,yellow,red
您还可以创建别名 . 在.bashrc中添加此函数(或在osx上添加.bash_profile)
function grepe { grep --color -E "$1|$" $2 }
您现在可以使用如下别名:“ ifconfig | grepe inet " or " grepe css index.html ” .
ifconfig | grepe inet
grepe css index.html
(PS:别忘了 source ~/.bashrc 在当前会话中重新加载bashrc)
source ~/.bashrc
这是一个shell脚本,它使用Awk的gsub函数将正在搜索的文本替换为正确的转义序列,以鲜红色显示:
#! /bin/bash awk -vstr=$1 'BEGIN{repltext=sprintf("%c[1;31;40m&%c[0m", 0x1B,0x1B);}{gsub(str,repltext); print}' $2
像这样使用它:
$ ./cgrep pattern [file]
不幸的是,它没有grep的所有功能 .
有关更多信息,请参阅Linux Journal中的文章“So You Like Color”
要在查看整个文件时突出显示模式,h可以执行此操作 .
此外,它为不同的图案使用不同的颜色 .
cat FILE | h 'PAT1' 'PAT2' ...
您还可以将 h 的输出传递给 less -R 以获得更好的读数 .
h
less -R
要为每个图案设置一个颜色并使用1种颜色,cxpgrep可能非常合适 .
另一个脏的方式:
grep -A80 -B80 --color FIND_THIS IN_FILE
我做了一个
alias grepa='grep -A80 -B80 --color'
在bashrc中 .
好的,这是一种方式,
wc -l filename
会给你行数 - 比如NN,然后就可以了
grep -C NN --color=always filename
如果要突出显示具有不同颜色的多个图案,请参阅this bash脚本 .
基本用法:
echo warn error debug info 10 nil | colog
您可以在按下一个键的同时更改图案和颜色,然后输入键 .
另一个答案提到了grep的-Cn开关,它包含n行Context . 我有时用n = 99作为一种快速而肮脏的方式,当egrep模式看起来过于繁琐时,或者当我在没有安装rcg的机器上时,获得[至少]一个完整的上下文和/或ccze .
我最近发现 ccze 这是一个更强大的着色剂 . 我唯一的抱怨是它是面向屏幕的(比如 less ,我从不使用它),除非你为"raw ANSI"输出指定-A开关 .
ccze
less
1上面提到的 rcg . 它仍然是我的最爱,因为在别名中自定义非常简单 . 像这样的东西通常在我的〜/ .bashrc中:
rcg
别名tailc ='tail -f / my / app / log / file | rcg发送“BOLD GREEN”收到“CYAN”错误“RED”
以下是一些方法:
grep --color -E 'pattern|$' file grep --color 'pattern\|$' file egrep --color 'pattern|$' file
您可以使用https://github.com/kepkin/dev-shell-essentials中的 highlight 脚本
highlight
它是 better 而不是 grep 因为你可以用 own color 突出显示每个匹配 .
$ command_here | highlight green "input" | highlight red "output"
或者你可以使用The Silver Searcher并做
ag <search> --passthrough
我使用以下命令用于类似目的:
grep -C 100 searchtext file
这将说明grep在突出显示的搜索文本之前和之后打印100 * 2行上下文 .
我使用了来自“Linux Server Hacks”的rcg,O'Reilly . 它非常适合您的需求,并且可以突出显示不同颜色的多个表达 .
#!/usr/bin/perl -w # # regexp coloured glasses - from Linux Server Hacks from O'Reilly # # eg .rcg "fatal" "BOLD . YELLOW . ON_WHITE" /var/adm/messages # use strict; use Term::ANSIColor qw(:constants); my %target = ( ); while (my $arg = shift) { my $clr = shift; if (($arg =~ /^-/) | !$clr) { print "Usage: rcg [regex] [color] [regex] [color] ...\n"; exit(2); } # # Ugly, lazy, pathetic hack here. [Unquote] # $target{$arg} = eval($clr); } my $rst = RESET; while(<>) { foreach my $x (keys(%target)) { s/($x)/$target{$x}$1$rst/g; } print }
我把它添加到我的.bash_aliases:
highlight() { grep --color -E "$1|\$" }
我想推荐ack -- better than grep, a power search tool for programmers .
$ ack --color --passthru --pager="${PAGER:-less -R}" pattern files
$ ack --color --passthru pattern files | less -R
$ export ACK_PAGER_COLOR="${PAGER:-less -R}" $ ack --passthru pattern files
我喜欢它,因为它默认为递归搜索目录(并且比 grep -r 更加智能),支持完整的Perl正则表达式(而不是POSIXish regex(3)),并且在搜索许多文件时具有更好的上下文显示 .
grep -r
这是一回事 . 机会是,无论如何你会少用,所以试试这个:
less -p pattern file
它将突出显示模式并跳转到文件中第一次出现的模式 .
16 回答
使用
colout
程序:http://nojhan.github.io/colout/它旨在为文本流添加颜色突出显示 . 给定正则表达式和颜色(例如“红色”),它再现具有突出显示的匹配的文本流 . 例如:
您可以链接多个调用以添加多个不同的颜色突出显示:
或者你可以使用带有N组的正则表达式(正则表达式的括号部分),然后是逗号分隔的N种颜色列表来实现相同的功能 .
您还可以创建别名 . 在.bashrc中添加此函数(或在osx上添加.bash_profile)
您现在可以使用如下别名:“
ifconfig | grepe inet
" or "grepe css index.html
” .(PS:别忘了
source ~/.bashrc
在当前会话中重新加载bashrc)这是一个shell脚本,它使用Awk的gsub函数将正在搜索的文本替换为正确的转义序列,以鲜红色显示:
像这样使用它:
不幸的是,它没有grep的所有功能 .
有关更多信息,请参阅Linux Journal中的文章“So You Like Color”
要在查看整个文件时突出显示模式,h可以执行此操作 .
此外,它为不同的图案使用不同的颜色 .
您还可以将
h
的输出传递给less -R
以获得更好的读数 .要为每个图案设置一个颜色并使用1种颜色,cxpgrep可能非常合适 .
另一个脏的方式:
我做了一个
在bashrc中 .
好的,这是一种方式,
会给你行数 - 比如NN,然后就可以了
如果要突出显示具有不同颜色的多个图案,请参阅this bash脚本 .
基本用法:
您可以在按下一个键的同时更改图案和颜色,然后输入键 .
另一个答案提到了grep的-Cn开关,它包含n行Context . 我有时用n = 99作为一种快速而肮脏的方式,当egrep模式看起来过于繁琐时,或者当我在没有安装rcg的机器上时,获得[至少]一个完整的上下文和/或ccze .
我最近发现
ccze
这是一个更强大的着色剂 . 我唯一的抱怨是它是面向屏幕的(比如less
,我从不使用它),除非你为"raw ANSI"输出指定-A开关 .1上面提到的
rcg
. 它仍然是我的最爱,因为在别名中自定义非常简单 . 像这样的东西通常在我的〜/ .bashrc中:别名tailc ='tail -f / my / app / log / file | rcg发送“BOLD GREEN”收到“CYAN”错误“RED”
以下是一些方法:
您可以使用https://github.com/kepkin/dev-shell-essentials中的
highlight
脚本它是 better 而不是
grep
因为你可以用 own color 突出显示每个匹配 .或者你可以使用The Silver Searcher并做
我使用以下命令用于类似目的:
grep -C 100 searchtext file
这将说明grep在突出显示的搜索文本之前和之后打印100 * 2行上下文 .
我使用了来自“Linux Server Hacks”的rcg,O'Reilly . 它非常适合您的需求,并且可以突出显示不同颜色的多个表达 .
我把它添加到我的.bash_aliases:
我想推荐ack -- better than grep, a power search tool for programmers .
我喜欢它,因为它默认为递归搜索目录(并且比
grep -r
更加智能),支持完整的Perl正则表达式(而不是POSIXish regex(3)),并且在搜索许多文件时具有更好的上下文显示 .这是一回事 . 机会是,无论如何你会少用,所以试试这个:
它将突出显示模式并跳转到文件中第一次出现的模式 .