Grep'i grep'e boruladıktan sonra renklendirmeyi koru


140

'Da simlar bir soru var Grep'ing'den sonra ls rengini koru'da ancak renkli grep çıktısını renklendirmenin korunmadığı başka bir grep'e borulaştırırsanız beni rahatsız ediyor.

Örnek grep --color WORD * | grep -v AVOIDolarak ilk çıktının rengini korumaz. Ama benim ls | grep FILEiçin rengi koruyor, neden fark var?


2
Unix komutunun kullanımıyla ilgili olduğu için bu soru konu dışı gibi görünüyor, unix.stackexchange.com'a
Raptor

Yanıtlar:


162

grepbazen renk çıktısını devre dışı bırakır, örneğin bir boruya yazarken. İle bu davranışı geçersiz kılabilirsinizgrep --color=always

Doğru komut satırı

grep --color=always WORD * | grep -v AVOID

Bu oldukça ayrıntılı, alternatif olarak sadece satırı ekleyebilirsiniz

alias cgrep="grep --color=always"

Blogunuza .bashrcörneğin ve kullanıma cgreprenkli grep olarak. Yeniden greptanımlarken, grepascii kaçış kodunun özel çıktısına dayanan ve beğenmeyen komut dosyalarıyla sorun yaşayabilirsiniz .


4
Bu çözüm yalnızca belirli şanslı koşullar altında çalışır. Aşağıdaki andersonvom'un cevabına bakınız.
studog

Benim durumumda (Ubuntu) zaten takma adım vardı grep. alias grep='grep --color=autobu yüzden ~/.bashrcilk başta tanımlandığım yeri değiştirmem gerekiyor .
sobi3ch

Benim için çalışmıyor - bu senaryoya benzer stackoverflow.com/a/7640077/248616
Nam G VU

Bu güzel yaratıcı fikir sadece basit ve çalışıyor stackoverflow.com/a/36288791/248616
Nam G VU

soru, ikinci grep'in birincisinin rengini bastırmaması için nasıl yapılacağıyla ilgilidir. Bu bir cevap değil.
johannes_lalala

74

Küçük bir tavsiye:

Kullanırken grep --color=always, bir sonraki boruya iletilen gerçek teller değiştirilecektir. Bu, aşağıdaki duruma yol açabilir:

$ grep --color=always -e '1' * | grep -ve '12'
11
12
13

Seçenek -ve '12'orta çizgiyi hariç tutsa da, 1ve arasında renkli karakterler olduğu için olmayacaktır 2.


Eğer kullanırsanız --color=auto, o zaman başka bir yere borulaştırdığınız gerçeğini almalı ve renkleri tamamen bastırmalı, ancak bir tür amacı yendi. Hala renkli sonuçlar istiyorsanız, sanırım son boru kullanarak tekrar grep olabilir --color.
andersonvom

2
Mac OS X'te, en azından @andersonvom'un önerdiği gibi son boruda renklendirme işe yaramaz. Emin değilim neden; belki dışlanan deseni renklendiriyor? --color=alwayssanırım, yukarıda belirtilen uyarılar ile çalışır.
user766353

3
İfadenizde aynı grep desenine iki kez sahip olmalısınız. Bunu sadece bir mac'ta test ettim: http://i.imgur.com/BhmwAlF.png
andersonvom

9

Sadece borunuzun sonunda aynı grep komutunu tekrarlayın.
grep WORD * | grep -v AVOID | grep -v AVOID2 | grep WORD


2
Komutları ters çevirmek aynı sonucu vermez mi? grep -v AVOID * | grep WORD
Brydon Gibson

@BrydonGibson muhtemelen, ancak herhangi bir sayıda borulu komut için çalıştığını göstermek için bir örnektir
Alex
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.