Kolorowy grep-przeglądanie całego pliku z podświetlonymi dopasowaniami
Uważam, że flaga grep
jest niezwykle przydatna. Jednak grep drukuje tylko wiersze z dopasowaniami (chyba że poprosisz o wiersze kontekstu). Biorąc pod uwagę, że każda drukowana linia ma dopasowanie, podświetlenie nie dodaje tyle możliwości, ile mogłoby.
Naprawdę chciałbym cat
plik i zobaczyć cały plik z podświetlonym wzorcem dopasowania.
Czy jest jakiś sposób, aby powiedzieć grepowi, aby wydrukował każdą czytaną linię, niezależnie od tego, czy jest dopasowanie? Wiem, że mógłbym napisać scenariusz. uruchamianie grepa na każdym wierszu pliku, ale byłem ciekaw, czy jest to możliwe ze standardowym grep
.
15 answers
Oto kilka sposobów, aby to zrobić:
grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 06:53:45
Tutaj jest coś w tym samym stylu. Jest szansa, że i tak będziesz używał mniej, więc spróbuj tego: {]}
less -p pattern file
Podświetli wzorzec i przeskoczy do pierwszego wystąpienia go w pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-11 22:53:21
Chciałbym polecić ACK -- lepsze niż grep, Narzędzie power search dla programistów .
$ 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
Uwielbiam go, ponieważ domyślnie przeszukiwaÄ ‡ rekurencyjne katalogi (i robi to o wiele mądrzej niż grep -r
), wspiera peĹ' ne wyrażenia regularne Perla (a nie POSIXish regex(3)
), i ma znacznie ładniejszy wyświetlacz kontekstowy podczas wyszukiwania wielu plików.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-17 18:05:04
Można również utworzyć alias. Dodaj tę funkcję w swoim .bashrc (or .bash_profile na osx)
function grepe {
grep --color -E "$1|$" $2
}
Możesz teraz używać aliasu w następujący sposób: "ifconfig | grepe inet
" lub " grepe css index.html
".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 13:13:07
Możesz użyć mojego highlight
skryptu z https://github.com/kepkin/dev-shell-essentials
Jest to lepsze niż grep
, ponieważ każdy mecz można podświetlić własnym kolorem.
$ command_here | highlight green "input" | highlight red "output"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 13:27:01
Użyj colout
program: http://nojhan.github.io/colout/
Jest przeznaczony do dodawania kolorowych podświetleń do strumienia tekstowego. Ze względu na wyrażenie regularne i kolor (np." czerwony") odtwarza strumień tekstowy z podświetlonymi dopasowaniami. e. G:
# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile
Możesz łączyć wiele wywołań, aby dodać wiele różnych kolorów:
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
Lub możesz osiągnąć to samo, używając wyrażenia regularnego z N grupami (nawiasowymi częściami wyrażenia regularnego), po którym następuje oddzielona przecinkami lista N colors=
vagrant status | \
colout \
'\''(^.+ running)|(^.+suspended)|(^.+not running)'\'' \
green,yellow,red
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-15 21:19:59
Używam rcg z "Linux Server Hacks", O ' Reilly. Jest idealny do tego, co chcesz i może wyróżniać wiele wyrażeń, z których każdy ma różne kolory.
#!/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
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-08 13:44:41
Dodałem to do mojego .bash_aliases:
highlight() {
grep --color -E "$1|\$"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-11 13:58:33
Ok, to jest jeden sposób,
wc -l filename
Poda ci liczbę linii-powiedz NN, wtedy możesz zrobić
grep -C NN --color=always filename
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-11 15:30:24
Oto skrypt powłoki, który używa funkcji Gsub Awk, aby zastąpić szukany tekst odpowiednią sekwencją ucieczki, aby wyświetlić go w jasnej czerwieni:
#! /bin/bash
awk -vstr=$1 'BEGIN{repltext=sprintf("%c[1;31;40m&%c[0m", 0x1B,0x1B);}{gsub(str,repltext); print}' $2
Użyj go tak:
$ ./cgrep pattern [file]
Niestety, nie posiada wszystkich funkcji grep.
Więcej informacji można znaleźć w Artykule " So You Like Color " W Linux Journal
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-11 15:38:03
Inna odpowiedź wspominała o przełączniku grep-Cn, który zawiera n linii kontekstu. Czasami robię to z n = 99 jako szybki i brudny sposób uzyskania [przynajmniej] screenfull kontekstu, gdy wzór egrep wydaje się zbyt skrzypiący, lub gdy jestem na komputerze, na którym nie zainstalowałem rcg i / lub ccze.
Niedawno odkryłem ccze
który jest mocniejszym koloryzatorem. Moją jedyną skargą jest to, że jest zorientowany na ekran (jak less
, którego nigdy nie używam z tego powodu), chyba że podasz-A przełącznik wyjścia "raw ANSI".
+ 1 za rcg
wzmiankę powyżej. Jest to nadal mój ulubiony, ponieważ jest tak prosty do dostosowania w aliasie. Coś takiego jest zazwyczaj w moim~/.bashrc:
Alias tailc= 'tail - f / my / app / log / file / RCG send "BOLD GREEN" receive "CYAN" error " RED "'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-11 22:20:20
Another dirty way:
grep -A80 -B80 --color FIND_THIS IN_FILE
I did an
alias grepa='grep -A80 -B80 --color'
W bashrc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 14:19:11
Alternatywnie możesz użyć Silver Searcher i zrobić
ag <search> --passthrough
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 01:55:58
Jeśli chcesz podświetlić kilka wzorów różnymi kolorami, zobacz Ten skrypt bash.
Użycie podstawowe:
echo warn error debug info 10 nil | colog
Możesz zmieniać wzory i kolory podczas pracy naciskając jeden klawisz, a następnie klawisz enter.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 21:24:17
Aby wyróżnić wzorce podczas przeglądania całego pliku, h może to zrobić.
Plus używa różnych kolorów dla różnych wzorów.
cat FILE | h 'PAT1' 'PAT2' ...
Możesz również przekierować wyjście h
na less -R
dla lepszego odczytu.
Aby grep i użyć 1 koloru dla każdego wzoru, cxpgrep może być dobrym dopasowaniem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 21:05:28