bash - grep--color auto
Colorized grep-用突出顯示的匹配查看整個文件 (10)
你也可以創建一個別名。 將這個函數添加到.bashrc(或osx上的.bash_profile)
function grepe {
grep --color -E "$1|$" $2
}
您現在可以使用這樣的別名:“ ifconfig | grepe inet
”或“ grepe css index.html
”。
(PS:不要忘記發送source ~/.bashrc
來重新加載當前會話中的bashrc)
我發現grep
的--color=always
標誌非常有用。 然而,grep只打印匹配的行(除非你要求上下文行)。 鑑於它打印的每一行都有匹配,突出顯示不會增加盡可能多的功能。
我真的很喜歡cat
一個文件,並用高亮的模式匹配查看整個文件。
有什麼方法可以告訴grep打印每一行,而不管是否有匹配? 我知道我可以編寫一個腳本來在文件的每一行上運行grep,但我很好奇這是否可以使用標準grep
。
你可以使用我的highlight
腳本從https://github.com/kepkin/dev-shell-essentials
它比grep
更好 ,因為你可以用自己的顏色來突出每個匹配。
$ command_here | highlight green "input" | highlight red "output"
另一個答案提到了grep的-Cn開關,它包含n行Context。 我有時候用n = 99來做這件事,當egrep模式看起來太複雜時,或者當我在一台沒有安裝rcg的機器上時,這是一種快速和骯髒的方式,和/或ccze。
我最近發現ccze
是一種更強大的著色劑。 我唯一的抱怨是它是面向屏幕的(就像less
,我從來沒有使用過這個原因),除非你為“原始ANSI”輸出指定-A開關。
上面提到的rcg
為+1。 它仍然是我最喜歡的,因為它是很容易定制的別名。 像這樣的東西通常在我的〜/ .bashrc中:
別名tailc ='tail -f / my / app / log / file | rcg發送“BOLD GREEN”收到“CYAN”錯誤“RED”
另一個臟方式:
grep -A80 -B80 --color FIND_THIS IN_FILE
我做了一個
alias grepa='grep -A80 -B80 --color'
在bashrc中。
如果你想用不同的顏色突出顯示幾個圖案,請參閱this bash腳本。
基本用法:
echo warn error debug info 10 nil | colog
您可以在按下一個鍵的同時更改圖案和顏色,然後輸入鍵。
我使用O'Reilly的“Linux Server Hacks”中的rcg。 它非常適合你想要的東西,並且可以突出顯示不同顏色的多個表情。
#!/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
}
我想推薦ack - 比grep更好,這是一款面向程序員的強大搜索工具 。
$ 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)
),並且在搜索許多文件時具有更好的上下文顯示。
或者,您可以使用The Silver Searcher並執行操作
ag <search> --passthrough
這是一個使用Awk的gsub函數的shell腳本,用正確的轉義序列替換您正在搜索的文本以明亮的紅色顯示它:
#! /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 ”
這裡有一些方法來做到這一點:
grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file