polecenie „podświetl”


11

Czy istnieje polecenie, którego można użyć do łatwego wyróżnienia (za pomocą kolorów, pogrubionego tekstu lub odwróconego tylnego / pierwszego planu) określonych ciągów w stdin, jednocześnie przekazując cały ciąg do stdout? Zastanawiam się nad jego zbudowaniem , ale wolałbym po prostu go użyć, jeśli już istnieje. Niektóre pożądane funkcje:

  1. Oddzielne ciągi wyróżnień są podświetlane w różny sposób, automatycznie. Na przykład pierwszy ciąg zostanie podświetlony na czerwono, drugi na zielono, trzeci na niebiesko bez ręcznej konfiguracji .
  2. Wykrywa obsługę kolorów i wraca do pogrubionych / odwróconych / innych metod podświetlania, o ile są one dostępne.
  3. Pozwól na dopasowanie wyrażeń regularnych i literałów.
  4. Najlepiej robi coś inteligentnego, jeśli dopasowania się pokrywają, na przykład „foobar” i „barbar”.
  5. Nic nie jest modyfikowane między standardowymi i standardowymi oprócz dodania kodów kolorów.


Ooo, dobre pytanie. Potrzebowałem tego dokładnie i ostatecznie napisałem coś, ale to po prostu oznaczone ciągi kolorami, nie ma żadnej z wymienionych funkcji
Michael Mrozek

Zamiast pisać nowe narzędzie, byłoby super niesamowite widzieć to jako dodatek do samego grep.
mattdm

1
Właściwa filozofia uniksowa byłaby nowym narzędziem, które można przepuszczać nie tylko z grep, ale także z innych strumieni. Podejrzewam, że istnieje co najmniej jeden moduł Perla, który prawdopodobnie może to dla ciebie zrobić ...
Shadur

1
@Gilles: To pytanie ma znacznie bardziej ograniczony zakres. W rzeczywistości czytanie tego było jednym z powodów, dla których stworzyłem to pytanie - aby poprosić o bardziej ogólne i elastyczne rozwiązanie.
l0b0

Odpowiedzi:


4

Może Generic Colouriser (grc) Radovana Garabíka ? Oczekuje pliku konfiguracyjnego jako argumentu i działa z wyrażeniami regularnymi. Więc nie całkiem bez konfiguracji, ale możesz użyć procesowego zastępowania procesów ( <(list)), więc na pewno bez ręcznej konfiguracji :-)


Aby to wyjaśnić bez potrzeby otwierania strony (i umożliwienia jej przeszukiwania), „ten” == Generic Colouriser ; grc i grcat ... Dzięki, podoba mi się.
Peter.O

grcma skryptu pomocnika: grcat. Oto przykład kolorowania wszystkich wielkich liter na czerwono. Krok 1: Skonfiguruj plik konfiguracyjny: printf "regexp=[A-Z]\ncolours=red\n" > ~/.grc/red-caps Krok 2; Użyj go: echo Hello World | grcat red-caps... Strona man podaje 3 przeszukiwane katalogi konfiguracji, a następnie sugeruje (?), Że plik konfiguracyjny może być ścieżką bezwzględną, ale ta ostatnia metoda znajdowania pliku konfiguracyjnego działa tylko dla mnie ze ścieżkami względnymi (grc wersja 1.3)
Peter. O

5

Sed na ratunek!

Możesz to poprawić (bo naprawdę tego potrzebuje), ale działa całkiem dobrze.

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
 COMANDO=$COMANDO's/'$1$'/\033[01;'$2$'m\033[K\\0\033[m\033[K/g\n'
 shift;shift;
done

sed -e "$COMANDO"
EOF

Dla uproszczenia hilight przyjmuje parę argumentów (najpierw dopasowanie, drugi kolor) W tym skrypcie atrybut jest zawsze pogrubiony

Przeczytaj man console_codes (Graphic Rendition), aby zobaczyć sekwencje ucieczki kolorów, lub spróbuj tego

for attrib in $(seq 0 12); do
  for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
    printf %b " $attrib $color:\033[$attrib;${color}mhi, dudes\033[m"
  done
done

Ma to istotne wady, ponieważ korzystanie z tego działa:

$ dmesg | hilight \\[ 34 ] 34

ale to wcale nie jest:

$ dmesg | hilight \\[ 34 ] 34 [[:digit:]] 31

ponieważ [: digit:] znajduje cyfry w sekwencjach ucieczki z poprzednich sesji.

Coś jak:

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

zawsze będzie działać jak wyjątek.

Za pomocą komendy czasu znalazłem te przyrosty o cztery, które upłynęły, co nie jest zbyt duże.

Polecenie sed można zastąpić dowolnym innym parserem, który ci się podoba lub pasuje do twoich potrzeb (awk, itp ...)


2

Można również użyć egrep ze wzorem, który pasuje do każdej linii znaku niedrukowalnego, na przykład:

dmesg | egrep --color "swap|$"

1

clide działa dobrze. Używam go na RHEL 6.2 z repozytorium EPEL


+1 za bardzo fajne narzędzie. Niestety nie ma wszystkich wymaganych funkcji.
l0b0

1

Jeśli twoja wersja grepma kolor, możesz użyć zmiany wyrażenia regularnego, aby grep podświetlił tekst, a także dopasował każdą linię, aby nic nie zostało wykluczone. Następujące czynności powinny załatwić sprawę:

<your command> |grep "highlightme\|^"

0

Jak wspomniano w linku, grep --color=alwaysdziała tylko dla jednego wzorca. To powiedziawszy, nie wierzę, że takie narzędzie istnieje.


0

Używam http://em.readthedocs.org/ . Łatwy w instalacji na różnych platformach dzięki Pythonowi. Prosty i działa dobrze.


Witamy w wymianie stosów Unix i Linux! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
slm

1
Według centrum pomocy : „Musisz jednak ujawnić swoją przynależność w swoich odpowiedziach”. Jeśli jesteś tym samym Igorem Kalnickim, który napisał em, przeredaguj swoją odpowiedź, aby było jasne, że nie jesteś użytkownikiem, ale autorem sugerowanego narzędzia.
manatwork
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.