Grep'ten daha az bir boru kullanıldığında renkli sonuçların alınması


246

Grep --colour seçeneğini çok kullanırım, ancak daha az kullanıyorum. Grep sonuçlarını nasıl daha az düşürür ve renklenmeyi nasıl koruyabilirim? (Yoksa bu mümkün mü?)

grep "search-string" -R * --colour | less 

EDIT :

Doğrudan bir çözüm veya buna eşdeğer bir şey arıyorum.



Ne yapar *? Grep'in man sayfasından: *: The preceding item will be matched zero or more times.Ama hala anlamıyorum ..! @JeremyPowell
Shayan

Yanıtlar:


274

Sadece çalıştırdığınızda grep --coloro ima grep --color=autoçıktı bir terminal olup olmadığını tespit eden ve eğer öyleyse renkleri sağlar. Ancak, bir boru tespit ettiğinde renklendirmeyi devre dışı bırakır. Aşağıdaki komut:

grep --color=always -R "search string" * | less

Her zaman renklendirmeyi etkinleştirir ve otomatik algılamayı geçersiz kılar ve rengin vurgulanmasını sağlar less.

EDIT: Sadece lessbenim için çalışıyor olsa da , belki de eski sürümde -R, önerildiği gibi bayrağın renkleri işlemesi gerekiyor.


143
less -RRenk kodlamasının daha az doğru yorumlanması için kullanmanız gerekir
burada

1
Sadece benim için çalıştı less, versiyona bağlı olabilir.
drrlvn

1
Bir (umarım) faydalı bir zeyilname: Bazı kibritleri hariç tutmam, ancak renklendirmeyi sürdürmem gerekiyordu, bu yüzden aslında grep pattern file | grep -v badpattern | grep --colour=always pattern | less -Rihtiyaçlarımla mükemmel bir şekilde karşılaştım. (Tekrar teşekkürler!)
Owen Blacker

7
Renk işleme özelliğini yeni uyguladıklarına lessve bu nedenle de özel bir colorlessaraç kullanma şansını kaçırdıklarına inanamıyorum . Yalnız adı için yapılmalıydı! Muhtemelen ikili olarak çalıştırıldığında otomatik olarak -R'yi çağıran bir yama yazmalıyım colorless.
Christian,

2
@OwenBlacker Bir takma ad olmayabilir. Sen olabilir $LESSseti -R.
greyfade,

27

Bunu .bashrcdosyanıza ekleyebilirsiniz :

export GREP_OPTIONS="--color=always"

veya şöyle bir takma ad oluşturun:

alias grepc="grep --color=always"

ve burada belirtildiği gibi -Rseçeneğini kullanmanız gerekecektir.less


29
Uyarı !: GREP_OPTIONS = "- color = always" grep (veya (e | f) grep) kullanan birçok komut dosyasını kırabilir .
mctylr

4
Evet, sadece takma grep için daha iyi. Seçeneği el grepile her zaman saflaştırabilir GREPveya geçersiz kılabilirsiniz --color.
asmeurer

Bu benim için işe yaramıyor, takma ad olsa işe yarıyor.
saeedgnu

9

Böyle bir durumda, küçük sh dosyaları oluşturmayı ve açmayı tercih ediyorum /usr/local/bin.
Ben genellikle grepözyinelemeli şekilde kullanıyorum pwd, bu yüzden kişisel senaryom:

#!/bin/sh
grep --color=always -r "$@" . | less -R

Ve sonra sadece kopyaladım /usr/local/bin/g(evet, çok kullanırım)


2
Neden bu tür bir şey için sadece kabuk işlevlerini kullanmıyorsunuz? g() { grep --color=always -r "$@" . | less -R }aynı çalışır ve muhtemelen (daha az) daha iyi performans verecektir.
00dani

1
@ 00dani evet, bu da geçerli bir alternatif ve bazen onu kullanıyorum. Lütfen bu durumda çoğu zaman GÇ'de geçirildiğini ve bu nedenle algılanabilir hiçbir performans artışı olmadığını unutmayın. Bunun yerine fonksiyonun açıkça yüklenmesi gerekiyor
Iazel

1

"Grep" takma adını kullanmayın, takma adlar tarafından asla kullanılmayan takma adlardan daha az "takma" deyin. Gözlerinde farklı .bashrcsadece koyun: alias less="less -r".


3
Tam olarak doğru değil. Bir kullanması gerekir hem grep --color=always ve less -R. Grep’in yalnızca başka bir işlemle birleştirildiğini bildiğini ve --color=autoseçeneğin yalnızca renk çıktısı alıp almayacağına karar vermek için yalnızca bu bilgileri kullandığını unutmayın.
brandizzi

3
Bu lessseçeneğin -rfarklı olduğunu unutmayın -R. Muhtemelen -Rdaha güvenlidir.
Craig McQueen,

1
Öyleyse neden çözümümü aşağı oyla. OP less, zaten `--color 'seçeneğini kullanan örnek için soruyor .
not2qubit

3
Takma ad muhtemelen burada istenmez. lessbir $LESSortam değişkenini destekler . Bu nedenle, bir diğer ad yerine, export LESS='-R'tercih edilebilir.
greyfade,

0

Koşmam lazım

grep --color=always -R "search string" * | less - r

ile -r sonra bayrağı daha az , sırayla bu çalıştırmak için.


Ne yapar *? Grep'in man sayfasından: *: The preceding item will be matched zero or more times.Ama hala anlamıyorum ..!
Shayan
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.