Saya menjalankan beberapa kode uji unit. Kode tes unit menghasilkan teks biasa. Ada banyak teks jadi saya ingin menyoroti untuk kata kunci penting pengguna.
Dalam hal ini kata kunci adalah "LULUS" dan "GAGAL".
Bagaimana Anda mewarnai "LULUS" menjadi hijau dan "GAGAL" menjadi merah?
bash
shell-script
scripting
colors
Trevor Boyd Smith
sumber
sumber
Jawaban:
supercat
tampaknya melakukan apa yang Anda cari.Tampaknya tidak ada cara untuk mengatakan apa yang harus diwarnai pada baris perintah, Anda harus menentukan file konfigurasi.
Sepertinya saya ingat dulu ada program yang disebut 'hilite' atau 'hl' yang menyorot teks yang cocok dengan pola (seperti
grep --colour
, tetapi juga menampilkan garis yang tidak cocok), tetapi saya tidak dapat menemukannya ketika saya mencarinya.Akhirnya, GNU
grep
dapat digunakan untuk menyoroti pola - tetapi hanya satu warna yang dapat digunakan (yaitu Anda tidak dapat memiliki PASS berwarna hijau dan GAGAL merah, keduanya akan disorot dengan warna yang sama).Pipa data Anda melalui sesuatu seperti ini:
Contoh ini menggunakan egrep (alias
grep -E
), tetapi-G
regexp dasar,-F
string-tetap, dan-P
PCRE juga berfungsi.Semua pertandingan akan disorot. Defaultnya merah, atau atur GREP_COLOR env var.
Kunci dari kerja ini adalah bahwa final
|$
dalam pola cocok dengan end-of-line (yaitu semua garis cocok) sehingga semua garis akan ditampilkan (tetapi tidak diwarnai).The
\b
adalah kata-batas penanda sehingga cocok misalnya FAIL tapi tidak KEGAGALAN. mereka tidak perlu, jadi hapuslah jika Anda ingin mencocokkan kata-kata parsial.Inilah contoh skrip wrapper untuk supercat yang saya tulis kemarin. Ini berfungsi, tetapi dalam menulisnya, saya menemukan bahwa supercat tidak memiliki opsi untuk pencarian case-sensitive. IMO, yang membuat program secara signifikan kurang bermanfaat. Itu, bagaimanapun, sangat menyederhanakan skrip karena saya tidak perlu menulis opsi '-i' :)
sumber
supercat
Anda bisa memodifikasi skrip yang Anda posting untuk menghasilkan file konfigurasi sementara berdasarkan argumen baris perintah, dan kemudian memanggilspc -c /path/to/your/temp/config
. Ini akan memungkinkan Anda untuk dengan mudah menentukan warna yang berbeda untuk pola yang berbeda pada baris perintah.Berikut ini skrip tujuan umum untuk mewarnai pola regex (mungkin perlu diperbaiki):
Beri nama
hilite.sh
dan gunakan dengan cara ini:sumber
community wiki
karena solusi saya tidak bekerja.$BIN
viaeval
substitusi perintah mungkin rapuh, rumit, dan benar-benar berbahaya. STDOUT adalah stream dan umumnya dimaksudkan untuk diproses oleh stream like tools. Mencoba untuk menangkap seluruh aliran dalam suatu variabel tidak terlalu efisien. Juga,eval
sangat kuat , jadi gunakan saja jika Anda benar-benar tahu apa yang Anda lakukan.Menanamkan string sewenang-wenang (seperti
tput
output) ke dalamsed
ekspresi pengganti bermasalah karena Anda harus memastikan (dengan melarikan diri) string tersebut adalahsed
sintaks yang valid , yang mana lebih banyak kerumitan yang sebaiknya dihindari. Saya akan menggunakanawk
sebagai gantinya. Sebagai contoh:Kuncinya adalah untuk menetapkan
tput
urutan keawk
variabel, dilakukan di sini menggunakan-v
opsi.sumber
awk
skrip terdiri dari satu set blok (barang-barang antara{}
di tingkat atas). Setiap blok dikaitkan dengan suatu kondisi - dalam posting saya di atas tidak ada karena saya ingin bertindak tanpa syarat pada setiap baris input. Awk beroperasi dengan membaca catatan dari file atau input standar (dalam hal ini STDIN b / c tidak ada nama file yang diberikan), dan mencocokkannya dengan setiap blok secara berurutan, menjalankan blok pada catatan jika kondisinya cocok.gunakan printf:
misalnya.
yang terakhir
\n
menambahkan karakter baris baru.untuk melihat kemungkinan nilai coba sesuatu seperti:
selain warna Anda dapat menambahkan pengubah seperti huruf tebal atau garis bawah atau berwarna dengan latar belakang berwarna dengan menggabungkan angka. Untuk membuat teks biru dengan latar belakang abu-abu yang digarisbawahi dan dipukul melalui penggunaan:
Bersulang,
/ B2S
sumber
Jika Anda senang menginstal skrip BASH dan
ack
,hhlighter
paket tersebut memiliki warna default yang berguna dan antarmuka yang mudah https://github.com/paoloantinori/hhighlighter :Anda dapat menggunakannya seperti itu untuk menyorot baris yang dimulai dengan
FAIL
:atau yang mengandung
FAIL
:atau untuk berbagai entri log umum:
Dan tentu saja, untuk satu warna (merah) dengan grep polos:
The
^
cocok setiap baris, tetapi adalah matcher khusus dan mencetak seluruh baris. Ekspresi yang akan disorot didefinisikan setelah a|
. Ekspresi lebih lanjut dapat ditambahkan selama dipisahkan|
.sumber