Anahtar kelimenin oluşumlarını farklı bir renkle işaretleme


13

Ben stdoutgibi bir çıktı tükürür bir program var :

[OK]      Something is ok
[OK]      Something else is also ok
[FAIL]    This does not look good
[FAIL]    Neither does this
[OK]      At least this is fine

Daha kolay anahtar kelimeye tekrarlarını işaretlemek istiyorum çıkışından başarısız noktaya FAILkırmızı ile olmaksızın başka mesajlar atarak. Ben de OKyeşil anahtar kelimeler :) vurgulamak eğer güzel olurdu .

Yöneltme egrep --color FAILyapıldığında yalnızca FAILanahtar kelimenin bulunduğu satırlar gösterilir .


1
Bir İçin grepçözümü bkz unix.stackexchange.com/a/34322
manatwork

kaynak kodunu değiştirmek için erişiminiz var mı? bir bash senaryosu mu?
h3rrmiller

@manatwork Belirttiğiniz bağlantıdan stackoverflow.com/questions/972370 yolumu tıkladım ve bazı tail -fve awkbüyü ile gitmek için iyiyim =)
Theodor

Yanıtlar:


10

manatworkDiğer sorudaki parlak küçük "veya hiçbir şey" hackine dayanarak , bunu iki vurgu rengi elde etme yeteneği ekleyen teklif ediyorum :

 $ myprogram | \
   GREP_COLORS='mt=01;32' egrep --color=always '\[OK\]|' | \
   GREP_COLORS='mt=01;31' egrep --color=always '\[FAIL\]|'

Yani, grepçıktıyı GREP_COLORSher seferinde farklı bir ortam değişkeni ile iki kez çalıştırırsınız .

'01; 32 'değeri "koyu yeşil", diğeri "koyu kırmızı" anlamına gelir. Daha fazla fikir için ANSI kodları hakkındaki Wikipedia makalesine bakın .

Ne yazık ki, bu GNU grep sürüm 2.5.3 veya üstü gerektirir. GNU grep'in eski sürümleri farklı bir renklendirme mekanizmasını destekledi, ancak bu sürümlerde özelliği bir boru hattında birden fazla kullanmanıza engel olan bir hata var. BSD grep, eski GNU grep renklendirme mekanizmasını taklit eder ve bir boru hattında iki kez çalışır, ancak saldırı nedeniyle "boş alt ifade" hakkında bağırır manatwork.

Hepsini tek bir satır yapmak için ilk iki satırın sonunda ters eğik çizgileri kaldırabilirsiniz. Ben sadece netlik ve SE sayfa formatı ile güzel oynamak için buraya böldüm.


Gerçekten parlak! Ancak bir nedenle komut dosyası, makinemdeki ikinci ifadeyi vurgulamıyor gibi görünüyor. CentOS 5 kullanıyorum
Theodor

2
Burada olan şey, CentOS 5'in desteklemeyecek kadar eski bir GNU grep'i GREP_COLORSçoğul olarak göndermesidir. Yalnızca eski GREP_COLORyöntemi kullanır ve bu yöntemde doğru şeyi yapmasını engelleyen bir hata vardır. Kullanılacak komutu GREP_COLOR=32vb. Değiştirirseniz, yalnızca ilk eşleşmenin vurgu rengi değişecektir. Eğer boru aracılığıyla sonuç ise hexdump -csize ikinci ekleyerek görebilirsiniz egrepkomutu şey yapmak yapar ama yasal ANSI değildir. Alt satır: grepbunun doğru çalışması için yükseltmeniz gerekir.
Warren Young

Haha bu içgörülü bir yorum. Evet CentOS5, birçok OS'de olduğu gibi eski hale geliyor, eski makine tükürüyor, tanrı terk edilmiş günlük mesajları :) Centos6'ya yükseltmenin mümkün olup olmadığını görmeye çalışacağım.
Theodor

Sadece bir CentOS 6 kutuyu benim çözüm kontrol ettik ve does benim tanıyı teyit orada işi. (Daha önceki testler Ubuntu sunucularında yapıldı.) EL6, GNU grep 2.6.3 ile geliyor. İlginç bir şekilde, GREP_COLORözellik değiştirilir değiştirilmez , (tekil) hatayı da düzeltti .
Warren Young

İlk grep tüm "FAIL" filtreleyecek çünkü bu sorunu nasıl çözdüğünü anlayamıyorum böylece ikinci grep maç için hiçbir şey kalmayacak ..
laertis

1

Bunun için çoklu kuyruk veya ccze kullanabilirsiniz, her ikisi de yapılandırmaların eşleşecek şekilde normal ifadeleri ve renkleri tanımlamasına izin verir.


1

Warren Young'ın cevabına dayanarak , aynı şeyi daha zarif ve çok daha az yazarak yapan Python senaryosunu yazdım . Bu betiği şu şekilde kullanırsınız:

cat yourfile | himul '\[OK\]' '\[FAIL\]'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.