Czy istnieje metoda pokolorowania wyniku cat
, tak jak grep
robi to.
W grep
większości konsol wyświetla kolorowe wyniki podkreślające wyszukiwane słowa kluczowe. W przeciwnym razie możesz wymusić to, wywołując. grep --color
Czy istnieje ogólny sposób pokolorowania wyjścia dowolnego programu zgodnie z osobistym wyborem.
Z tego, co rozumiem, sam program nie ponosi odpowiedzialności za kolory. To jest skorupa.
Używam domyślnej powłoki w FreeBSD 5.2.1, która wygląda tak, jakby nigdy nie widziała kolorów od epoki.
unix
syntax-highlighting
color-scheme
Lelouch Lamperouge
źródło
źródło
Odpowiedzi:
cat
wyróżnianie składni jest po prostu poza zakresem.cat
nie jest do tego przeznaczony. Jeśli chcesz, aby cała zawartość jakiegoś pliku była w jakiś sposób pokolorowana (z tym samym kolorem dla całego pliku), możesz użyć sekwencji ucieczki terminalu do sterowania kolorem.Oto przykładowy skrypt, który wybierze kolor na podstawie typu pliku (możesz użyć czegoś takiego zamiast wywoływać
cat
bezpośrednio):Powyższe (na terminalu, który obsługuje te sekwencje specjalne) wydrukuje dowolny plik tekstowy jako „pogrubiony” i wydrukuje każdy plik binarny jako czerwony. Możesz użyć
strings
zamiastcat
do drukowania plików binarnych i możesz ulepszyć logikę, aby dopasować ją do swoich potrzeb.źródło
cat
/grep
/any particular program
cat
wywołanie na stałe częścią,$cmd
która jest inicjowana jako $ 1, jeśli istnieją dwa argumenty lub wartość domyślna, jeśli jest tylko jeden. Wtedy po prostu napisać:colorful.sh grep file
.pygmentize
nie jest w stanie pokolorować. Jakieś wskazówki?Poleciłbym
pygmentize
z pakietu pythonpython-pygments
. Możesz zdefiniować następujący przydatny alias (chyba że używaszccat
z pakietu ccrypt).A jeśli chcesz numery linii:
źródło
highlight
polecenia linux .alias ccat='highlight -O ansi'
alias dog='pygmentize -g'
, ponieważ, ponieważ psy są fajniejsze niż koty!#!/bin/bash \n pygmentize -g $1 | less -R
nyancat
.Opcje:
pygmentacja jest dobra. Mam alias:
ale główną atrakcją jest kolejna szeroko dostępna alternatywa
Instalacja:
Może być konieczne zainstalowanie
pygments
za pomocą:i dla
highlight
pakietu, który jest łatwo dostępny we wszystkich dystrybucjachW akcji:
Załączam ujęcia dla obu poniżej, aby uzyskać dobre porównanie wyróżnień
Oto
pygmentize
w akcji:a to jest
highlight
:źródło
highlight
działał świetnie dla moich potrzeb i łatwo instalował, dzięki. Jeśli chcesz przeglądać pliki bez rozszerzeń (np. .Bash_aliases), dodaj--syntax=bash
dodatkowo, aby-O ansi
je wymusić.highlight
jest 34x szybszy niż ten program w języku Python. Moc klasycznych języków jest silna.highlight
, chcesz dodać--force
do aliasu, w przeciwnym razie wygeneruje błąd dla formatów plików, których nie rozumie, a podczascat
zastępowania chcesz, aby nadal wyświetlał dane wyjściowe bez podświetlania, co--force
robi. Wszyscy razem:alias cat="highlight -O ansi --force"
-O ansi
domyślną wartość wyjściową HTML :-)Od końca kwietnia 2018 r .:
Projekt jest klonem kota ze wsparciem dla kolorów i dostosowań napisanych w Rust. Oferuje nie tylko podświetlanie składni z wieloma motywami, ale także integrację z Git. Jak opisano w dokumentacji:
Nie trzeba dodawać, że jest znacznie szybszy niż pygmentacja i nie dusi się w przypadku dużych plików.
Kod źródłowy i wydania binarne + instrukcje instalacji można znaleźć w repozytorium Github, a także porównanie z alternatywnymi programami .
źródło
bat
domyślnie pozostaje w trybie interaktywnym. Aby zachowywał się bardziejcat
, użyj go z-pp
argumentem. Aliasalias cat="bat -pp"
jest prawdopodobnie tym, czego ludzie szukają.vimcat
jest jednoplikowy (skrypt powłoki) i działa dobrze:http://www.vim.org/scripts/script.php?script_id=4325
Ostatnia aktualizacja pochodzi z grudnia 2013 r. Wskazówka: możesz wymusić rozpoznawanie typu pliku przez
vimcat -c "set ft=<type>"
.źródło
~/.vimrc
więc podświetlanie składni będzie takie samo, gdy chcesz edytować (vim) lub wydrukować (vimcat). Zauważ, że zaktualizowaną wersję vimcat można znaleźć w repozytorium vimpager .vimpager
nie używa mojego vim kolorów.vimcat
(czas wykonywania 1 ~ 2 sekundy) jest znacznie wolniejszy niżpymentize
(~ 200highlight
ms), co jest znacznie wolniejszy niżcat
(~ 20 ms), który jest znacznie wolniejszy niż (~ 2 ms ). Z drugiej strony,vimcat
obsługuje więcej typów plików i jest bardziej dokładne niżhightlight
apygmentize
, i to jeszcze szybciej niż pierwszyvim
potem:q
. Więc zarabia mój wybór do tego konkretnego zadania.Narzędzie, którego szukasz, to prawdopodobnie supercat (oto krótkie wprowadzenie opublikowane przez Linux Journal).
Zdaję sobie sprawę, że ta odpowiedź jest spóźniona i nie w pełni spełnia wymagania PO. Więc dodam go tylko w celach informacyjnych (może być przydatny dla innych osób szukających sposobu pokolorowania pliku tekstowego).
źródło
Istnieje kolorowa wersja cat - ccat . Pobierz z https://github.com/jingweno/ccat/ .
Instalacja w systemie Linux / Windows / macOS
Jest to pojedynczy samodzielny plik wykonywalny, więc aby go zainstalować, możesz rozpakować wersję binarną dla swojego systemu operacyjnego z https://github.com/jingweno/ccat/releases i skopiować na przykład plik binarny ccat
/usr/local/bin
.Jeśli chcesz uniknąć plików binarnych lub jeśli nie masz pliku binarnego dla swojej platformy (np. Raspberry pi itp.), Możesz na przemian kompilować ze źródła, pod warunkiem , że masz działające
go
środowisko programistyczne (apt install golang
na Linux-ach opartych na Debianie lubbrew install golang
na Macu ):Instalowanie na komputerze Mac przez homebrew
Alias do
cat
Aby zamienić zwykłe
cat
zccat
dodatkiem~/.bashrc
:ccat
jest zaimplementowany w Go , więc jest to natywny plik binarny, który działa znacznie szybciej niż rozwiązania oparte na Pythonie, takie jak pygments , moduł z tyłupygmentize
; Nie widziałem żadnej zauważalnej różnicy prędkości międzycat
iccat
.źródło
brew install ccat
wystarczy, nie trzebabrew tap
już.Najlepszym i najłatwiejszym sposobem, aby to zrobić, jeśli masz vima na swoim komputerze, jest skorzystanie
vimcat
zvimpager
programu.git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
Uruchom vimcat:
vimcat index.html
źródło
highlight
i 3x wolniej niżbat
dla 30-liniowego skryptu bash na moim komputerze.source-highlight
Być może można znaleźć ciekawe
source-highlight
wydane pod GNU : pakiet inny niżhighlight
.Fragment
apt-cache show source-highlight
:Zrobiłem trochę aliasu (Cat i PCat, patrz poniżej) i to jest ich wynik
Możesz zainstalować na Debianie za pomocą
i dodaj go jako alias np. w swoim
.bash_aliases
z czymś w rodzaju linii poniżej.Lub możesz zrobić podobny alias (bez
-i
końcówki, aby mieć możliwość wtargnięcia )Wśród opcji, że można odczytać z
man source-highlight
tych-s
podkreśla, że istnieje możliwość wyboru, czy życie , podświetlenie po linii poleceń lub pozostawić do programu tego obowiązku:źródło
less
zesource-highlight
ktoś na GitHub daje odpowiedź:export LESSOPEN="| source-highlight -f esc -i %s -o STDOUT"
aexport LESS=" -R "
. Bardzo przydatne, gdypygmentize
nie jest dostępne i nie można go zainstalować.To nie jest poprawne. Terminal po prostu interpretuje kody kolorów wysyłane do terminala. W zależności od swoich możliwości może ignorować niektóre kody formatowania / kolorowania.
Ze strony podręcznika nie wydaje się, że cat obsługuje kolorowanie swoich wyników. Nawet jeśli miałoby obsługiwać kolorowanie jak grep, co powinno pokolorować w pliku tekstowym? Składnia podkreślająca wymaganą znajomość podstawowego języka, który nie jest objęty prostym narzędziem, takim jak cat.
Możesz wypróbować bardziej wydajne edytory, takie jak vim, emacs, gedit itp. Na platformie unix, jeśli Twoim celem jest wyróżnienie podświetlonego kodu.
źródło
cat
Nie jest przeznaczony do drukowania plików z numerami linii, nie służy do kompresji wielu pustych linii, nie służy do patrzenia na niedrukowalne znaki ASCII, służy do łączenia plików”. - ze stylu UNIX lub cat -v Uważany za szkodliwy .Na OSX po prostu zrób
brew install ccat
.https://github.com/jingweno/ccat . Podobnie jak cat, ale wyświetla zawartość z podświetlaniem składni. Wbudowany Go.
źródło
nietoperz właśnie to robi i może być aliasowany do kota
alias cat='bat'
źródło
Stare pytanie, tylko odpowiedź na rekord, aby zapewnić rozwiązanie, z którego ostatecznie skorzystałem. Być może jest to nieco zuchwałe (prawdopodobnie nie pierwotna intencja parametru), ale:
alias cgrep = 'grep -C 9000'kot cokolwiek | cgrep „snozzberries”..
grep -C N
dostarczy N linii kontekstu powyżej i poniżej znalezionego elementu. Jeśli jest większy niż wejście, całe wejście jest uwzględniane. W tym przypadku upewniamy się tylko, że jest większy niż jakiekolwiek typowe wyjście terminalowe, na które będziemy chcieli przyjrzeć się ręcznie, co jest generalnie tym, co chcesz zrobić, jeśli zaznaczysz.EDYCJA: Jednak to rozwiązanie sugerowane poniżej przez Beni Cherniavsky-Paskin jest lepsze - pasuje (i podkreśla) albo słowo, którego szukasz, albo początek linii (nie do wyróżnienia). Wynik netto jest dokładnie taki, jak chcesz.
To nowe najlepsze rozwiązanie, jakie widziałem dla tego problemu, dzięki Beni.
źródło
egrep 'snozzberries|$'
W tym pytaniu zalecono /superuser/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordin
grcat
/grc
narzędzie jako alternatywęsupercat
.Człowiek grc i od
grcat
; jest częścią pakietu grc ( źródła ):źródło
Napisałem mały skrypt do wykonania koloryzacji
pygmentize
.A następnie utwórz alias do skryptu.
alias cat=colorize_via_pygmentize
. Nie zapomnij też zapisać tego w ~ / .bashrc .źródło
Jeśli chcesz, aby jedna linijka ustawiała
cat
wydruk na dany kolor, możesz dołączyćalias cat="echo -en 'code' | cat - "
dla Twojej
~/.$(basename $SHELL)rc
Oto lista kolorów: https://gist.github.com/chrisopedia/8754917
Lubię to
'\e[1;93m'
, co jest intensywne żółte. To wygląda tak:źródło
po prostu użyj vim i tego pliku vimrc .
oneliner:
nano -v
może być również alternatywą.źródło
Umieść w swoim ~ / .bashrc
następnie
źródło