Kiedy używam np cat file.txt | grep --color=tty "pattern"
., Podświetlam wzorzec, który wyszukuję. Kiedy chcę trochę więcej kontekst wokół każdego trafienia, grep ma -A
, -B
i -C
parametry.
Chcę jednak wyświetlić cały plik (lub dowolne wyjście polecenia) i podświetlić określony wzorzec. Czy istnieje takie polecenie podświetlenia lub narzędzie?
linux
command-line
DerMike
źródło
źródło
Odpowiedzi:
Na unix.stackexchange.com pojawiła się odpowiedź, która miała tę fajną sztuczkę:
lub
który pasuje do twojego wzorca lub końca linii na każdej linii. Podświetlany jest tylko wzór.
źródło
GREP_OPTIONS='--color'
do swojego~/.bashrc
(lub zmodyfikuj ustawienie, aby uwzględnić--color
). Musisz uruchomić nowy terminal lub wykonać to przypisanie w wierszu poleceń w bieżącym terminalu, aby zadziałało.Lubię potwierdzenie .
To jest jak grep, ale lepiej. Podświetla domyślnie, a z
--passthru
opcją pokazuje cały plik (lub standardowe wejście) zamiast tylko pasujących linii.źródło
tail
, musisz również użyć tej--filter
opcji. Na przykład:tail -f myLogFile | ack --filter --passthru pattern
Polecam również użycie
less
(lub takiego), ale chcę pokazać bardziej dydaktyczne rozwiązanie. Po zdefiniowaniu tej funkcji:Możesz użyć tego w następujący sposób:
Uwaga: w tej wersji rozróżniana jest wielkość liter, aby zmienić tę, która jest dołączana
i
po wyrażeniu.g
sed
źródło
tput
zamiast zakodować wartości. W ten sposób unikniesz również używaniaecho -e
, które może mieć inne efekty.prog | highlight "pattern"
lubhighlight "pattern" file
:highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
sed
umiejętności w zasadzie nie istnieją. Jak musiałbym to zmienić, aby dopasować wielkość liter do wzorca. W każdym razie dodam ten do moich funkcji bash_funkcje. Dziękuję Ci bardzo.Dokonanie tego będzie
-C
miałogrep
wystarczająco wysoką wartość.źródło
less
podkreśla wzór, więclub
a potem w mniej,
/
aby wyszukać wzór, który zostanie podświetlony.Dygresja:
Możesz poprawić swoje polecenie, na przykład
ustawić alias
alias grep="grep --color=tty"
i używać go w następujący sposób:źródło
grep
(zgrep, bzgrep, bzfgrep itp.) Tak więc, jeśli chcesz, aby wszystkie formy grep zachowywały się spójnie, musisz ustawić alias dla każdej formy grep. Nowa odpowiedź @ Casual powyżej nie przyda się z czymś takimbzgrep pattern /var/log/messages.?.gz
, co jest przykładem, w którym podświetlenie koloru BARDZO pomocne.Jest ładne narzędzie supercat , które służy dokładnie temu celowi. Może zarówno pokolorować dane wyjściowe konsoli, jak i wygenerować „podświetlony” HTML z wprowadzonych danych.
źródło
/etc/supercat
Ubuntu), które ustawiają reguły kolorowania, są to w zasadzie pary kolor / wyrażenie regularne (z kilkoma dodatkowymi regułami); strona podręcznika jest również krótka i ładna.spcrc
plik składni vima na vim.org/scripts/script.php?script_id=2676