Renk kodlarını grep girişi ile nasıl saklayabilirim?


15

İki ardışık grepkomut kullanırsanız, örneğin:

echo "foo bar" | grep foo | grep bar

Sonra ilk desen ("foo") vurgulanmaz. Aslında, grep'in renk kodlarını girişinden kaldırdığı görülüyor. Bunu önlemenin bir yolu var mı?


Aynı cevaba sahip başka bir soru: renkli çıktıyı bash fonksiyonu içindeki bir grep'e nasıl geri yükleyebilirsiniz?
Camille Goudeseune

Yanıtlar:


23

Kullanın --color=always.

grepçıktının bir boruya (veya dosyaya) olup olmadığını tespit eder. Çıktı dosyalanırken en çok renk istemezsiniz, çünkü bu terminal için kaçış dizisidir. Tipik:

foo ^[[01;31m^[[Kbar^[[m^[[K

örneğin:

grep pattern file > result

Geçersiz kılmak için --color=always.

grep --color=always pattern file | ...

Misal:

Dosyaya sahip olmak:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

Sonra

grep --color=always ID file | grep --color=always 2013 | grep foo

renk olur ID, 2013ve foo.

grep --color=always ID file | grep 2013 | grep foo

renk olur IDve fooancak 2013.

1 Önemli: Renklerdeneklenen dağınıklığın zincirdeki bir sonraki komuta aktarıldığınıda hatırlamanız gerekir. Kimlik renklendirildikten sonra (kolaylıkla) eşleşemezsiniz, örnID=111.


Bazı durumlarda belki de terminal renklerinin dosyada olmasını istersiniz . Örneğin deneyin

 grep --color=always foo file > result
 cat result

Sonuçta elde edilen dosya taşınabilirliği çok sınırlı olsa da.


Renklendirmenin kendisi de bir eklentidir.


Good @slm tarafından belirtildiği gibi şunları ekleyebilirsiniz:

export GREP_OPTIONS="--color=always"

sizin için .bashrcvs, ama yok sürece nedense gerçekten etkilerini anlamak ve hala yapmak istiyorum için. grepYukarıda belirtilen gerçek nedeniyle birçok yönden kırılacaktır 1 .

aliasSık kullanıyorsanız bir ekleyin .

 alias cgrep='grep --color=always'

GREP_OPTIONSve --color üç seçenek almak : never, autove always. İlki düşünülenler için ilk ikisi olmalıdır GREP_OPTIONS.

Ayrıca kontrol edebilir GREP_COLORSiçinde mansayfaları veya en gnu grep .


Bu yöntemle ilgili ek ayrıntılar / dezavantajlar burada: stackoverflow.com/questions/867877/…
slm

1
Bunu yanıta da export GREP_OPTIONS="--color=always"ekleyin : .bashrc'de seçenekleri herhangi bir grep için varsayılan yapar ve hemen hemen çivilenmişsinizdir!
slm

Bu Süper Uuser Soru-Cevap bölümünde iyi şeyler: superuser.com/questions/36022/…
slm

"grep, çıktının bir boruya olup olmadığını algılar" - aha! Bu anahtar, grep bir borunun parçasıysa renklendirmiyor. Bu tür şeylere karşı bir ikame ilkesi olmalıdır: - /
Chris2048

@ Chris2048: Bu, terminale renk basan çoğu araç için standarttır. Biraz daha ayrıntı bulabilirsiniz bundan algılanan şekline, Ve bu OSX yerli üzerinde örneğin ls ve renkler ile bazı sorunları gösterirls ve gnu coreutils.
Runium
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.