Memodifikasi warna grep

23

Ketika saya menangkap sesuatu, hasilnya selalu berwarna merah. Saya tahu bahwa perintah grep --colormencetak hasil dalam warna, yang secara default berwarna merah. Bisakah saya mengubah warnanya?

Codito ergo sum
sumber

Jawaban:

18

Anda dapat mengubah warna sorotan grepdengan menggunakan variabel lingkungan GREP_COLORS, yang dapat Anda atur seperti ini:

export GREP_COLORS='ms=01;31'

Opsi numerik

Angka-angka dapat gaya teks, mengubah warna latar depan atau warna latar belakang, atau mengubah font.

Kondisi awal untuk semua GREP_COLORSopsi adalah gaya teks, font, dan warna default terminal. Menyetel ulang semua ini akan kembali ke default terminal, bukan default apa pun grep.

Legenda

  • ;ʙ;- ;memisahkan pilihan numerik yang Anda ingin menggabungkan (misalnya, berani kuning-hitam menggabungkan teks pilihan 1, 33dan 40dalam 1;33;40)
  • +ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ dihidupkan ketika Anda menggunakan opsi angka itu
  • -ᴇꜰꜰᴇᴄᴛ- ᴇꜰꜰᴇᴄᴛ dimatikan saat Anda menggunakan opsi angka itu
  • color, green, cyan, Dan grey- di bagian "Teks styling", ini mengacu pada warna foreground
  • colors - di bagian "Gaya teks", ini mengacu pada warna latar depan dan warna latar belakang
  • this color- di bagian "Warna latar depan", ini mengacu pada warna latar depan; di bagian "Warna latar belakang", ini mengacu pada warna latar belakang

Penataan teks

String kosong atau 0me - reset semua gaya teks dan me-reset kedua warna ke default tetapi tidak me-reset font ke default.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│     │ «reset style+colors»    │ «reset style+colors»    │ «reset style+colors»  │
│   0 │ «reset style+colors»    │ «reset style+colors»    │ «reset style+colors»  │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│   1 │ +bold, +brighter color  │ +bold, +brighter color  │ +brighter color,      │
│     │                         │                         │   -forced grey        │
│   2 │ +fainter color          │ +fainter color          │ +forced grey          │
│   3 │ +italic                 │ +italic                 │ +forced green         │
│     │                         │                         │   ● overrides 2 and 4 │
│   4 │ +underline              │ +underline              │ +forced cyan          │
│     │                         │                         │   ● overrides 2       │
│   5 │ «no effect»             │ +blink                  │ «no effect»           │
│   7 │ +invert colors          │ +invert colors          │ +invert colors        │
│   8 │ +invisible              │ +invisible              │ «no effect»           │
│     │                         │   ● underline appears   │                       │
│   9 │ +strikethrough          │ +strikethrough          │ «no effect»           │
├─────┼─────────────────────────┤                         ├───────────────────────┤
│  21 │ -bold, -brighter color, │ +double underline       │ -brighter color,      │
│     │   -fainter color        ├─────────────────────────┤   -forced grey        │
│  22 │ -bold, -brighter color, │ -bold, -brighter color, │ -brighter color,      │
│     │   -fainter color        │   -fainter color        │   -forced grey        │
│  23 │ -italic                 │ -italic                 │ -forced green         │
│  24 │ -underline              │ -underline,             │ -forced cyan          │
│     │                         │   -double underline     │                       │
│  25 │ «no effect»             │ -blink                  │ «no effect»           │
│  27 │ -invert colors          │ -invert colors          │ -invert colors        │
│  28 │ -invisible              │ -invisible              │ «no effect»           │
│  29 │ -strikethrough          │ -strikethrough          │ «no effect»           │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Warna latar depan

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  39 │ «reset this color»      │ «reset this color»      │ «reset this color»    │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  30 │ very dark grey          │ black                   │ black                 │
│  31 │ dull red                │ red                     │ light red             │
│  32 │ dull green              │ light green             │ light green           │
│  33 │ dull yellow             │ yellow                  │ yellow                │
│  34 │ greyish blue            │ dark blue               │ sky blue              │
│  35 │ dull purple             │ purple                  │ purple                │
│  36 │ teal                    │ cyan                    │ cyan                  │
│  37 │ light grey              │ light grey              │ light grey            │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  90 │ dark grey               │ dull grey               │ dull grey             │
│  91 │ red                     │ bright red              │ bright red            │
│  92 │ lime green              │ bright green            │ bright green          │
│  93 │ yellow                  │ bright yellow           │ pure yellow           │
│  94 │ light greyish blue      │ dull blue               │ deep blue             │
│  95 │ light purple            │ magenta                 │ magenta               │
│  96 │ cyan                    │ bright cyan             │ bright cyan           │
│  97 │ off white               │ white                   │ white                 │
├─────┴──────┬──────────────────┴─────────────────────────┴───────────────────────┤
│ 38;2;ʀ;ɢ;ʙ │ replace ʀ, ɢ, and ʙ with RGB values from 0 to 255                  │
│            │   for closest supported color (non-GUI TTY has only 16 colors!)    │
│ 38;5;ɴ     │ replace ɴ with value from 256-color chart below                    │
│            │   for closest supported color (non-GUI TTY has only 16 colors!)    │
└────────────┴────────────────────────────────────────────────────────────────────┘

Warna latar belakang

Perhatikan bahwa TTY non-GUI tidak memberikan seri warna latar belakang yang lebih cerah.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  49 │ «reset this color»      │ «reset this color»      │ «reset this color»    │
├─────┼─────────────────────────┼─────────────────────────┼───────────────────────┤
│  40 │ very dark grey          │ black                   │ black                 │
│  41 │ dull red                │ red                     │ light red             │
│  42 │ dull green              │ light green             │ light green           │
│  43 │ dull yellow             │ yellow                  │ yellow                │
│  44 │ greyish blue            │ dark blue               │ sky blue              │
│  45 │ dull purple             │ purple                  │ purple                │
│  46 │ teal                    │ cyan                    │ cyan                  │
│  47 │ light grey              │ light grey              │ light grey            │
├─────┼─────────────────────────┼─────────────────────────┼╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶╴╶┤
│ 100 │ dark grey               │ dull grey               │ black                 │
│ 101 │ red                     │ bright red              │ light red             │
│ 102 │ lime green              │ bright green            │ light green           │
│ 103 │ yellow                  │ bright yellow           │ yellow                │
│ 104 │ light greyish blue      │ dull blue               │ sky blue              │
│ 105 │ light purple            │ magenta                 │ purple                │
│ 106 │ cyan                    │ bright cyan             │ cyan                  │
│ 107 │ off white               │ white                   │ light grey            │
├─────┴──────┬──────────────────┴─────────────────────────┴───────────────────────┤
│ 48;2;ʀ;ɢ;ʙ │ replace ʀ, ɢ, and ʙ with RGB values from 0 to 255                  │
│            │   for closest supported color (non-GUI TTY has only 8 colors!)     │
│ 48;5;ɴ     │ replace ɴ with value from 256-color chart below                    │
│            │   for closest supported color (non-GUI TTY has only 8 colors!)     │
└────────────┴────────────────────────────────────────────────────────────────────┘

Bagan 256 warna

Bagan 256 warna

Di atas grafik adalah tangkapan layar dari konten yang diterbitkan dalam "kode pelarian ANSI, warna 8-bit" di Wikipedia , yang ditulis oleh CMG Lee et al. pada 24 Februari 2016 dan sesudahnya , dan dilisensikan oleh penulis di bawah lisensi hak cipta CC BY-SA 3.0 dan lisensi hak cipta GFDL .

Warna dari grafik 256 warna di atas dapat digunakan sebagai berikut:

  • 38;5;ɴ- ganti ɴ dengan nilai warna tertentu pada grafik di atas untuk mengubah warna latar depan ke warna terdekat yang didukung terminal
  • 48;5;ɴ- ganti ɴ dengan nilai warna tertentu pada bagan di atas untuk mengubah warna latar belakang ke warna terdekat yang didukung terminal

Sebagai contoh, 38;5;214;48;5;30akan mengatur latar depan ke warna 214dan latar belakang ke warna 30, memberikan hasil oranye pada terminal yang mendukungnya.

Perhatikan bahwa tidak semua terminal mendukung semua 256 warna, jadi penting untuk menyadari bahwa warna yang dipilih mungkin tidak digunakan. Hanya warna yang didukung paling dekat dengan yang dipilih yang akan digunakan.

Misalnya, TTY non-GUI hanya mendukung 16 warna dasar untuk latar depan dan 8 warna dasar untuk latar belakang, sehingga warna terdekat yang akhirnya digunakan mungkin bukan yang Anda harapkan. Sebagai contoh, pemilihan oranye-on-teal di atas ( 38;5;214;48;5;30) menunjukkan sebagai kuning-hitam di TTY non-GUI, karena itu adalah warna terdekat yang didukung.

Font

10adalah font default. 11through 20adalah potensi font alternatif ( 20biasanya berarti font in di terminal langka yang mendukungnya). Hanya 10dan 12tampaknya ada secara default di TTY non-GUI, dan tidak ada yang ada di Terminal GNOME atau xterm.

greptidak benar-benar beralih font kembali sebelum keluar, jadi jalankan resetjika Anda terjebak dalam font yang tidak diinginkan setelah grepkembali ke shell.

┏━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ### ┃ GNOME Terminal          ┃ xterm                   ┃ non-GUI TTY           ┃
┡━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
│  10 │ «no effect»             │ «no effect»             │ «reset font»          │
│  11 │ «no effect»             │ «no effect»             │ -messed up font       │
│  12 │ «no effect»             │ «no effect»             │ +messed up font       │
└─────┴─────────────────────────┴─────────────────────────┴───────────────────────┘

Sumber bagian "Numeric options":
        "ANSI escape code, parameter SGR (Select Graphic Rendition)" di Wikipedia
        ● Verifikasi eksperimental pada Terminal GNOME xterm,, dan TTY non-GUI-mode pada Ubuntu 16.04


contoh perubahan warna setelah mengatur <code> GREP_COLORS </code>

Nilai default GREP_COLORSadalah'ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Arti setiap elemen yang diterima GREP_COLORSdapat diperiksa di halaman manual GNU.org .

Untuk penyelesaian, dan seperti yang ditunjukkan oleh @damadam, Anda harus menambahkan exportke Anda .bashrcuntuk menyimpan perubahan.

Terkait:

Grep Berwarna-warni

Gunakan warna berbeda untuk setiap grep lainnya

M. Becerra
sumber
2
Ada lebih banyak warna dan opsi pemformatan yang tersedia, coba <<<hello GREP_COLORS='ms=5;104' grep '.*'sekali! Daftar kode dapat ditemukan misalnya di sini (bagian 6).
hidangan penutup
1
Bagaimana Anda menggunakan nilai warna dari tabel 256 warna dengan GREP_COLORS?
Sebastian Stark
1
@SebastianStark Untuk latar depan, gunakan 38;5;ɴ, di mana ɴ harus diganti dengan salah satu nilai warna. Untuk latar belakang, gunakan 48;5;ɴdengan cara yang sama. Sebagai contoh, 38;5;214;48;5;30harus memberi Anda jeruk pada itik. Jika tidak, terminal Anda mungkin tidak mendukung 256 warna. Sebagai contoh, TTY non-GUI hanya mendukung 16 warna untuk latar depan dan 8 untuk latar belakang dan akan memilih warna latar depan dan latar belakang dari 16 dan 8 yang paling dekat dengan oranye pada warna, yang berwarna kuning pada hitam.
Chai T. Rex
1
@ ChaiT.Rex thx, berfungsi dengan baik. Namun tidak terlalu jelas dari jawabannya.
Sebastian Stark
2
@ ChaiT.Rex terima kasih, meskipun bagi saya masalahnya lebih pada bagian "256 warna" dari teks tidak ada menyebutkan opsi-opsi itu, hanya tabel warna
Sebastian Stark
6

Selain jawaban dari @M. Becerra, jangan lupa untuk menambahkan ini exportdi dalam ~/.bashrc. Anda bisa melakukannya seperti itu:

nano ~/.bashrc

dan ketik sekarang export:

export GREP_COLORS='ms=01;33:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Ini menetapkan grephasil menjadi kuning, dan saya tidak perlu mengulang exportterminal setelah restart atau komputer.

Damadam
sumber
5
edit jawaban asli untuk membuatnya lebih baik di lain waktu.
Thorbjørn Ravn Andersen
Ini lebih baik TETAPI sepertinya hanya berfungsi di Linux, bukan Mac :(
Sridhar Sarnobat
@SridharSarnobat Mac benar-benar berbeda dari Ubuntu, Mac bukan Linux, dan saya melakukan langkah ini untuk Ubuntu (jika itu untuk Mac, itu akan di luar topik di sini, pertanyaan Mac harus ditanyakan pada Ask Different
damadam
Ya. Tidak ada gunanya saya memposting pertanyaan lain hanya untuk saya menunjukkan kesedihan saya :)
Sridhar Sarnobat