Rya*_*roi 771
以下是一些方法:
grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file
Run Code Online (Sandbox Code Playgroud)
Pau*_*ce. 89
这是一回事.很可能,你会少用,所以试试这个:
less -p pattern file
Run Code Online (Sandbox Code Playgroud)
它将突出显示模式并跳转到文件中第一次出现的模式.
eph*_*ent 46
我想推荐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)
),并且在搜索许多文件时具有更好的上下文显示.
Fab*_* Sa 18
您还可以创建别名.在.bashrc中添加此函数(或在osx上添加.bash_profile)
function grepe {
grep --color -E "$1|$" $2
}
Run Code Online (Sandbox Code Playgroud)
您现在可以使用这样的别名:" ifconfig | grepe inet
"或" grepe css index.html
".
(PS:别忘source ~/.bashrc
了在当前会话中重新加载bashrc)
kep*_*kin 18
您可以使用我的highlight
脚本来自https://github.com/kepkin/dev-shell-essentials
这比因为你可以用自己的颜色突出显示每个匹配更好.grep
$ command_here | highlight green "input" | highlight red "output"
Run Code Online (Sandbox Code Playgroud)
use*_*246 13
使用colout
程序:http://nojhan.github.io/colout/
它旨在为文本流添加颜色突出显示.给定正则表达式和颜色(例如"红色"),它再现具有突出显示的匹配的文本流.例如:
# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile
Run Code Online (Sandbox Code Playgroud)
您可以链接多个调用以添加多个不同的颜色突出显示:
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
Run Code Online (Sandbox Code Playgroud)
或者你可以通过使用带有N组的正则表达式(正则表达式的带括号的部分),然后是逗号分隔的N种颜色列表来实现相同的功能.
vagrant status | \
colout \
'\''(^.+ running)|(^.+suspended)|(^.+not running)'\'' \
green,yellow,red
Run Code Online (Sandbox Code Playgroud)
V.7*_*V.7 13
正如grep -E '|pattern'
已经建议的那样,只是想澄清一下,也可以突出显示整行。
例如,tail -f somelog | grep --color -E '| \[2\].*'
(具体来说,部分-E '|
):
小智 7
我使用了来自"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
}
Run Code Online (Sandbox Code Playgroud)
-z
grep 的选项也很漂亮!
cat file1 | grep -z "pattern"
Run Code Online (Sandbox Code Playgroud)
使用 ripgrep,又名 rg: https: //github.com/BurntSushi/ripgrep
rg——通道...
颜色为默认值:
rg -t tf -e 'key.*tfstate' -e dynamodb_table
--passthru
Print both matching and non-matching lines.
Another way to achieve a similar effect is by modifying your pattern to
match the empty string.
For example, if you are searching using rg foo then using
rg "^|foo" instead will emit every line in every file searched, but only
occurrences of foo will be highlighted.
This flag enables the same behavior without needing to modify the pattern.
Run Code Online (Sandbox Code Playgroud)
亵渎,这是理所当然的,但 grep 已经变得自满了。
brew/apt/rpm/whatever install ripgrep
你永远不会回去。
小智 5
我将此添加到我的.bash_aliases中:
highlight() {
grep --color -E "$1|\$"
}
Run Code Online (Sandbox Code Playgroud)
这个答案使用GNU sed
. 这适用于该工具的非常旧版本(使用 2012 版本进行了测试sed (GNU sed) 4.2.2
,但这也适用于旧版本。)
不幸的是,如果在 MacOS 上,您可能必须使用brew
.
sed
解决方案的强大功能和灵活性由于已经有很多不同的解决方案,但没有一个解决方案显示sed
为解决方案,
并且因为sed
比更轻、更快grep
,所以我更喜欢用于sed
此类工作:
sed 's/pattern/\o33[47;31;1m&\o033[0m/' file
Run Code Online (Sandbox Code Playgroud)
这似乎不太直观。
s/pattern/replaced/
是sed
替换命令,替换pattern
为replaced
。\o33
是sed
生成字符octal 033
-> 的语法Escape
。<Ctrl>-<V>
后跟<Esc>
, 来直接键入字符。)Esc [ 47 ; 31 ; 1 m
是一个ANSI 转义码:背景灰色,前景红色和粗体。&
将重新打印pattern
.Esc [ 0 m
将颜色恢复为默认值。您也可以突出显示整行,但将其标记pattern
为红色:
sed -E <file -e \
's/^(.*)(pattern)(.*)/\o33[30;47m\1\o33[31;1m\2\o33[0;30;47m\3\o33[0m/'
Run Code Online (Sandbox Code Playgroud)
tail -f
,用于实时跟踪日志文件使用的优点之一sed
:您可以使用Bell ascii 字符在控制台上发送警报蜂鸣声。我经常使用 sed 像: 0x7
sudo tail -f /var/log/kern.log |
sed -ue 's/[lL]ink .*\([uU]p\|[dD]own\).*/\o33[47;31;1m&\o33[0m\o7/'
Run Code Online (Sandbox Code Playgroud)
或者,如果使用systemd
:
sudo journalctl -akf |
sed -ue 's/[lL]ink .*\([uU]p\|[dD]own\).*/\o33[47;31;1m&\o33[0m\o7/'
Run Code Online (Sandbox Code Playgroud)
-u
代表无缓冲。这可确保该线路立即得到处理。因此,当我连接或断开以太网电缆时,我会立即听到一些蜂鸣声。
当然,link up
您可以在同一个文件中监视USB
,而不是模式,或者......
sed
例如:您是查理,正在等待来自爱丽丝或鲍勃的邮件,通过您的邮件服务器传输:
所以你必须from=.*\(alice\|bob\)@someserver.org
在 中搜索/var/log/mail.log
。作为sed
一种语言,您可以使用许多指令,例如:在监视某些邮件服务器上的传入请求时避免imap
并记录:pop
tail -f /var/log/mail.log | sed -ue '
/[[:space:]]\(imap\|pop\)d\[/d;
/[^[:alnum:]]smtpd\[/{
s/.*/\o33[30;47m&\o33[0m/;
s/\(alice\|bob\)@someserver.org/\o33[31;1m\o7&\o33[30m/g;
}
'
Run Code Online (Sandbox Code Playgroud)
这会
imap
或pop
服务器的行。imapd[
或 的行popd[
),smtp
突出显示有关服务器的行smtpd[
)和smtpd[
行时,突出显示并发出蜂鸣声。alice@someserver.org
bob@someserver.org
-n
未使用开关)。