it-swarm-id.com

Sintaks menyoroti/mewarnai kucing

Apakah ada metode untuk mewarnai keluaran cat, seperti yang dilakukan grep.

Untuk grep, di sebagian besar konsol ini menampilkan output berwarna yang menyoroti kata kunci yang dicari. Jika tidak, Anda dapat memaksanya dengan memanggil grep --colorApakah ada cara umum untuk mewarnai output dari program apa pun sesuai dengan pilihan pribadi Anda.

Dari apa yang saya mengerti, program itu sendiri tidak bertanggung jawab atas warna. Itu adalah Shell. 

Saya menggunakan Shell default di FreeBSD 5.2.1 yang sepertinya belum pernah melihat warna sejak Epoch.

162

cat dengan penyorotan sintaks hanya di luar jangkauan. cat tidak dimaksudkan untuk itu . Jika Anda hanya ingin seluruh isi beberapa file diwarnai dengan cara tertentu (dengan warna yang sama untuk seluruh file), Anda dapat menggunakan urutan escape terminal untuk mengontrol warna.

Berikut ini contoh skrip yang akan memilih warna berdasarkan jenis file (Anda dapat menggunakan sesuatu seperti ini alih-alih memanggil cat secara langsung):

#!/bin/bash
fileType="$(file "$1" | grep -o 'text')"
if [ "$fileType" == 'text' ]; then
    echo -en "\033[1m"
else
    echo -en "\033[31m"
fi
cat $1
echo -en "\033[0m"

Di atas (pada terminal yang mendukung urutan pelarian itu) akan mencetak file teks apa pun sebagai 'tebal', dan akan mencetak file biner apa pun sebagai warna merah. Anda dapat menggunakan strings alih-alih cat untuk mencetak file biner dan Anda dapat meningkatkan logika untuk membuatnya sesuai dengan kebutuhan Anda.

23
Costi Ciudatu

Saya akan merekomendasikan pygmentize dari paket python python-pygments . Anda mungkin ingin mendefinisikan alias praktis berikut (kecuali jika Anda menggunakan ccat dari paket ccrypt).

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

Dan jika Anda ingin nomor baris:

alias ccat='pygmentize -g -O style=colorful,linenos=1'
362
buergi

Pilihan:

pygmentize bagus. Saya memiliki alias:

alias c='pygmentize -g'

tetapi highlight adalah alternatif lain yang tersedia secara luas

alias cats='highlight -O ansi --force'

Instalasi:

Anda mungkin harus menginstal pygments menggunakan:

Sudo pip install pygments
Sudo easy_install Pygments #for Mac user

dan untuk paket highlight yang mudah tersedia di semua distribusi

Sudo apt-get install highlight
Sudo yum install highlight

Dalam Tindakan:

Saya melampirkan bidikan untuk keduanya di bawah untuk perbandingan yang baik dalam sorotan

Inilah pygmentize yang sedang beraksi: Pygmentize highlighting on python file

dan ini highlight: Highlight highlighting on python file

100

Alat yang Anda cari kemungkinan adalah supercat (inilah pengenalan singkat diterbitkan oleh Linux Journal). 

Saya menyadari bahwa jawaban ini terlambat, dan tidak sepenuhnya memenuhi persyaratan OP. Jadi saya menambahkannya hanya untuk referensi (ini bisa berguna untuk orang lain yang mencari cara mewarnai keluaran file teks). 

31
mfriedman

vimcat adalah file tunggal (skrip Shell) dan berfungsi dengan baik:

http://www.vim.org/scripts/script.php?script_id=4325

Pembaruan terakhir adalah dari Desember 2013. Petunjuk: Anda dapat memaksa pengenalan jenis file dengan vimcat -c "set ft=<type>".

29
Soergener

Dari akhir April 2018 dan selanjutnya:

Bat - Seekor kucing (1) mengkloning dengan sintaks dan integrasi Git.

Proyek ini adalah kloning kucing dengan dukungan untuk warna dan penyesuaian yang ditulis dalam Rust. Ia tidak hanya menawarkan penyorotan sintaksis dengan banyak tema, tetapi juga integrasi Git. Seperti yang dijelaskan dalam dokumentasi:

kelelawar mencoba mencapai tujuan berikut:

  • Berikan highlight sintaksis yang indah dan canggih
  • Integrasikan dengan Git untuk menampilkan modifikasi file
  • Jadilah pengganti drop-in untuk kucing (POSIX)
  • Menawarkan antarmuka baris perintah yang mudah digunakan

Ini, tentu saja, jauh lebih cepat daripada menghitung dan tidak tersedak ketika dihadapkan dengan file besar.

Kode sumber dan rilis biner + petunjuk instalasi dapat ditemukan di repositori Github, serta perbandingan dengan program alternatif .

20
dangom

Ada versi berwarna kucing - ccat . Dapatkan dari https://github.com/jingweno/ccat/ .

Instalasi di Linux/Windows/macOS

Ini adalah eksekusi mandiri tunggal sehingga untuk menginstalnya Anda dapat membongkar versi biner untuk OS Anda dari https://github.com/jingweno/ccat/releases dan menyalin biner ccat misalnya ke /usr/local/bin

Jika Anda ingin menghindari binari, atau jika tidak ada biner untuk platform Anda (mis. Raspberry Pi, dll), maka Anda dapat secara kompilasi mengkompilasi dari sumber mengingat Anda memiliki lingkungan pengembangan yang berfungsi go (apt install golang pada berbasis debian linuxes atau brew install golang di mac):

go get -u github.com/jingweno/ccat

Biner ccat akan dibuat di bawah $GOPATH/bin Anda.

Menginstal di Mac melalui homebrew

brew install ccat

Alias ​​to cat

Untuk mengganti cat reguler dengan ccat tambahkan ~/.bashrc:

alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`

ccat diimplementasikan di Go , jadi ini adalah biner asli yang berjalan jauh lebih cepat daripada solusi berbasis Python, seperti pygments , modul di belakang pygmentize; Saya tidak melihat perbedaan kecepatan yang terlihat antara cat dan ccat.

19
ccpizza

Cara terbaik dan cara termudah untuk melakukannya jika Anda memiliki vim di mesin Anda adalah dengan menggunakan vimcat yang datang dengan program vimpager.

  1. Instal vimpage dengan git clone git://github.com/rkitover/vimpager cd vimpager Sudo make install  
  2. Jalankan vimcat:

    vimcat index.html

11
Amaynut

Dari apa yang saya mengerti, biner itu sendiri tidak bertanggung jawab atas warna. Itu adalah Shell.

Itu tidak benar. Terminal hanya mengartikan kode warna yang dikeluarkan ke terminal. Bergantung pada kemampuannya, ia dapat mengabaikan kode pemformatan/pewarnaan tertentu.

Dari halaman manual, sepertinya kucing tidak mendukung pewarnaan hasilnya. Bahkan jika itu untuk mendukung pewarnaan seperti grep apa yang harus diwarnai dalam file teks? Sintaksis menyoroti pengetahuan yang diperlukan tentang bahasa yang mendasarinya yang tidak berada dalam lingkup utilitas sederhana seperti kucing.

Anda dapat mencoba editor yang lebih kuat seperti vim, emacs, gedit dll pada platform unix jika melihat kode yang disorot adalah tujuan Anda.

8
Ashwinee K Jha

Pada OSX cukup lakukan brew install ccat.

https://github.com/jingweno/ccat . Suka kucing tetapi menampilkan konten dengan penyorotan sintaksis. Dibangun pada Go.

7
joost

Pertanyaan lama, hanya menjawab catatan untuk memberikan solusi yang akhirnya saya gunakan. Mungkin ini sedikit hacky (mungkin bukan maksud asli dari parameter), tetapi:

alias cgrep = 'grep -C 9000'

kucing apa pun | cgrep 'snozzberries' </strike>

..grep -C N akan memberikan N baris konteks di atas dan di bawah item yang ditemukan. Jika lebih besar dari input, seluruh input disertakan. Dalam hal ini, kami hanya memastikan itu lebih besar dari keluaran terminal tipikal yang ingin kami lihat secara manual, yang umumnya ingin Anda lakukan jika menyorot.

EDIT: Namun, solusi yang disarankan di bawah ini oleh Beni Cherniavsky-Paskin lebih unggul - cocok dengan (dan menyoroti) baik Kata yang Anda cari atau awal dari garis (tidak dapat disorot). Hasil bersihnya persis seperti yang Anda inginkan.

cat whatever | egrep 'snozzberries|$'

Itu solusi terbaik baru yang pernah saya lihat untuk masalah itu, terima kasih Beni.

3
Mr. B

kelelawar tepatnya melakukan itu dan dapat alias cat alias cat='bat'

2

Dalam pertanyaan ini https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordingrcatgrc ALAT DIREKOMENDASIKAN SEBAGAI ALTERNATIF UNTUK _/supercat .

Man of grc dan grcat ; itu adalah bagian dari paket grc ( sources ):

grc - frontend untuk generic colouriser grcat (1)

grcat - baca dari input standar, colourise dan tulis ke output standar

2
osgx

Saya telah menulis skrip kecil untuk melakukan pewarnaan menggunakan pygmentize.

colorize_via_pygmentize() {
    if [ ! -x "$(which pygmentize)" ]; then
        echo "package \'Pygments\' is not installed!"
        return -1
    fi

    if [ $# -eq 0 ]; then
        pygmentize -g [email protected]
    fi

    for FNAME in [email protected]
    do
        filename=$(basename "$FNAME")
        lexer=`pygmentize -N \"$filename\"`
        if [ "Z$lexer" != "Ztext" ]; then
            pygmentize -l $lexer "$FNAME"
        else
            pygmentize -g "$FNAME"
        fi
    done
}

Dan kemudian buat alias ke skrip. alias cat=colorize_via_pygmentize. Juga jangan lupa untuk menyimpan ini di ~/.bashrc .

1
Rohit Sehgal