Uważam grep
, że --color=always
flaga jest niezwykle przydatna. Jednak grep drukuje tylko linie z dopasowaniami (chyba że poprosisz o linie kontekstu). Biorąc pod uwagę, że każda drukowana linia ma takie samo dopasowanie, wyróżnianie nie dodaje tyle możliwości, ile mogłoby.
Naprawdę chciałbym cat
zobaczyć plik i zobaczyć cały plik z zaznaczonymi dopasowaniami wzorca.
Czy jest jakiś sposób, aby powiedzieć grepowi, aby drukował każdą czytaną linię, niezależnie od tego, czy istnieje dopasowanie? Wiem, że mógłbym napisać skrypt uruchamiający grep w każdej linii pliku, ale byłem ciekawy, czy jest to możliwe ze standardem grep
.
sed
.sed
rozwiązanie dostaje wiele kolorów kosztem dodatkowej złożoności (zamiast około 30 znaków, które mają około 60 znaków).Odpowiedzi:
Oto kilka sposobów, aby to zrobić:
źródło
egrep --color "pattern|" file
(kredyt stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$"
. W przeciwnym razie podświetlenie kolorów nie nastąpi.Oto coś w tym samym stylu. Możliwe, że i tak będziesz używać mniej, więc spróbuj tego:
Podświetli wzór i przejdzie do pierwszego wystąpienia w pliku.
źródło
-
:… | less -p pattern -
-i
opcji sprawi, że wielkość liter w dopasowaniu będzie niewrażliwaless -ip pattern file
.less
z-R
przełącznikiem:… | less -Rip introduction -
Chciałbym polecić ack - lepsze niż grep, narzędzie wyszukiwania mocy dla programistów .
Uwielbiam to, ponieważ domyślnie korzysta z rekurencyjnego przeszukiwania katalogów (i jest o wiele mądrzejsze niż
grep -r
), obsługuje pełne wyrażenia regularne Perla (zamiast POSIXishregex(3)
) i ma znacznie ładniejszy kontekst wyświetlania podczas przeszukiwania wielu plików.źródło
ack
jest sprytny, ale czasem zbyt sprytny i wyklucza typ pliku, w którym było trafienie.ack -a
przeszuka wszystkie typy plików, wciąż wykluczając.git/
.svn/
itp.ack
nie przeszukuje moich zdjęć, więc-a
robi to za dużo. Dodałem--type-set=freemarker=.ftl
do siebie~/.ackrc
, aby podać jeden przykład.Możesz użyć mojego
highlight
skryptu z https://github.com/kepkin/dev-shell-essentialsJest to lepsze niż
grep
dlatego, że możesz podświetlić każde dopasowanie własnym kolorem .źródło
grep
, które jest standardowym narzędziem na komputerach z * nix.colout
wspomniano w innej odpowiedzi.colout
, co jest dobre, jeśli chcesz sprawdzić, co robi.Możesz także utworzyć alias. Dodaj tę funkcję do swojego .bashrc (lub .bash_profile w systemie OSX)
Możesz teraz używać takiego aliasu: „
ifconfig | grepe inet
” lub „grepe css index.html
”.(PS: nie zapomnij
source ~/.bashrc
przeładować bashrc w bieżącej sesji)źródło
--color=always
zamiast--color
less
interpretować kody kolorów, użyjless -R
.Użyj
colout
programu: http://nojhan.github.io/colout/Służy do dodawania wyróżnień kolorów do strumienia tekstowego. Biorąc pod uwagę wyrażenie regularne i kolor (np. „Czerwony”), odtwarza strumień tekstowy z podświetlonymi dopasowaniami. na przykład:
Możesz połączyć wiele wywołań, aby dodać wiele różnych wyróżnień kolorów:
Lub możesz osiągnąć to samo, używając wyrażenia regularnego z N grupami (części wyrażenia w nawiasach), a następnie oddzielonej przecinkami listy N kolorów.
źródło
grep
, a jest on już rozwinięty w odpowiedziach,colout
jest to najlepsze rozwiązanie problemu, jaki miałeś, najlepsze, o czym jestem świadomy. Zgodnie z filozofią UNIX, programy powinny być napisane, aby zrobić jedną rzecz dobrze. Bogrep
filtruje strumień tekstu. Bocolout
to jest kolorowanie lub wyróżnianie strumienia tekstu.colout
jest tak bardzo użytecznym narzędziem. Naucz się tego raz, używaj go w wielu sytuacjach, zamiast uczyć się jednego narzędzia do podświetlania plików dziennika, drugiego do podświetlania wyników testowych itp.Używam rcg z „Linux Server Hacks”, O'Reilly. Jest idealny do tego, czego chcesz i może wyróżniać wiele wyrażeń w różnych kolorach.
źródło
-z
Rozwiązaniem dla grep jest również bardzo śliskie!źródło
Dodałem to do moich .bash_aliases:
źródło
Aby podświetlić wzorce podczas przeglądania całego pliku, h może to zrobić.
Dodatkowo używa różnych kolorów dla różnych wzorów.
Możesz także przesyłać dane wyjściowe do
h
do wless -R
celu lepszego odczytu.Aby grep i użyć 1 koloru dla każdego wzoru, cxpgrep może być dobrym dopasowaniem.
źródło
Ok, to jest jeden sposób,
poda ci liczbę linii - powiedz NN, to możesz zrobić
źródło
Oto skrypt powłoki, który korzysta z funkcji gsub Awk, aby zastąpić szukany tekst odpowiednią sekwencją zmiany znaczenia, aby wyświetlać go na czerwono:
Używaj go w ten sposób:
Niestety nie ma wszystkich funkcji grep.
Więcej informacji można znaleźć w artykule „ So You Like Colour ” w Linux Journal
źródło
Jedna inna odpowiedź wspomniała o przełączniku grep -Cn, który zawiera n wierszy kontekstu. Czasami robię to z n = 99 jako szybki i brudny sposób na uzyskanie [przynajmniej] pełnego kontekstu, gdy wzorzec egrep wydaje się zbyt wierny lub gdy jestem na komputerze, na którym nie zainstalowałem rcg i / lub ccze.
Niedawno odkryłem,
ccze
który jest bardziej wydajnym koloryzatorem. Moją jedyną skargą jest to, że jest zorientowany na ekran (jakless
, którego nigdy nie używam z tego powodu), chyba że podasz przełącznik -A dla wyjścia „surowego ANSI”.+1 za
rcg
wzmiankę powyżej. Nadal jest moim ulubionym, ponieważ można go łatwo dostosować w aliasie. Coś takiego jest zwykle w moim ~ / .bashrc:alias tailc = 'tail -f / my / app / log / file | rcg wyślij „BOLD GREEN” otrzymaj „CYAN” błąd „RED”
źródło
inny brudny sposób:
Zrobiłem
w bashrc.
źródło
Alternatywnie możesz użyć Srebrnego Poszukiwacza i zrobić
źródło
Jeśli chcesz wyróżnić kilka wzorów w różnych kolorach, zobacz ten skrypt bash.
Podstawowe użycie:
Możesz zmieniać wzory i kolory podczas uruchamiania, naciskając jeden klawisz, a następnie klawisz Enter.
źródło
Używam następującego polecenia w podobnym celu:
grep -C 100 searchtext file
Powie to grep, aby wydrukować 100 * 2 wierszy kontekstu przed i po podświetlonym wyszukiwanym tekście.
źródło
Oto moje podejście , zainspirowane rozwiązaniem @ kepkin:
To akceptuje wiele argumentów (ale nie pozwala ci dostosowywać kolorów). Przykład:
źródło
Opcja
-C999
załatwi sprawę w przypadku braku opcji wyświetlania wszystkich linii kontekstu. Większość innych wariantów grep również to obsługuje. Jednak: 1) nie jest generowany żaden wynik, gdy nie znaleziono dopasowania i 2) ta opcja ma negatywny wpływ na wydajność grep: gdy-C
wartość jest duża, to wiele linii może wymagać tymczasowego przechowywania w pamięci, aby grep mógł określić, które linie kontekstu do wyświetlenia, gdy nastąpi dopasowanie. Zauważ, że implementacje grep nie ładują plików wejściowych, a raczej odczytują kilka wierszy lub używają przesuwanego okna nad danymi wejściowymi. Kontekst „przed częścią” musi być przechowywany w oknie (pamięci), aby wyprowadzić linie kontekstu „przed” później, gdy zostanie znalezione dopasowanie.Wzorzec taki jak
^|PATTERN
lubPATTERN|$
dowolny pod-wzorzec pasujący do pustych elementów, na przykład,[^ -~]?|PATTERN
jest fajną sztuczką. Jednak 1) te wzory nie pokazują niepasujących linii podświetlonych jako kontekst i 2) nie można tego użyć w połączeniu z niektórymi innymi opcjami grep, takimi jak-F
i-w
na przykład.Żadne z tych podejść nie jest dla mnie satysfakcjonujące. Używam ugrep i ulepszonego grep z opcją
-y
wydajnego wyświetlania wszystkich niedopasowanych danych wyjściowych jako podświetlonych kolorem linii kontekstu. Inne narzędzia podobne do grep, takie jak ag i ripgrep, oferują również opcję przekazywania. Ale ugrep jest kompatybilny z GNU / BSD grep i oferuje super zestaw opcji grep, takich jak-y
i-Q
. Na przykład oto, co-y
pokazuje opcja w połączeniu z-Q
(interaktywny interfejs zapytania do wprowadzania wzorców):źródło