Komut çıktısının tamamını görüntülerken konsol arama çıktısını vurgulayın


19

Örneğin kullandığım zaman cat file.txt | grep --color=tty "pattern"aramayı vurguladığım kalıbı alırım. Ben her bir isabet çevresindeki bazı daha fazla bağlam istediğinizde, grep vardır -A, -Bve -Cparametreleri.

Ancak, tüm dosyayı (veya herhangi bir komut çıktısını) görüntülemek ve belirli bir deseni vurgulamak istiyorum. Böyle bir vurgulama komutu veya aracı var mı?


Şimdi yapmak istedikleriniz zaten yaptıklarınızdan nasıl farklı?
Benjamin Bannier

Yanıtlar:


22

Unix.stackexchange.com'da bu düzgün hileye sahip bir cevap vardı:

grep -E --color 'pattern|$' file.txt

veya

grep --color 'pattern\|$' file.txt

deseninizle veya her satırdaki satır sonu ile eşleşir. Yalnızca desen vurgulanır.


+1 Basit ve kolayca zgrep, bzgrep, vb için uyarlanabilir. Güzel!
Stefan Lasiewski

Her zaman --renk yazmaktan kaçınmanın bir yolu var mı? Renk seçeneğini grep'e gömmek oldukça basit, neden her seferinde rengi açıkça yazdığımızdan emin değilim. Ben grepd dosyaları grep - renk $ 1 $ 2 söyleyerek bir bash olduğunu söyleyerek komut dosyaları oluşturmaya çalıştım ama çalışmıyor. Bunu düzeltmek için burada herhangi bir ipucu
Srujan Kumar Gulla

1
@lordlupine: Ekle GREP_OPTIONS='--color'adresinden Müşteri ~/.bashrc(veya içerecek şekilde ayarını değiştirmek --color). Geçerli olması için geçerli terminaldeki komut satırında yeni bir terminal başlatmanız veya bu atamayı yürütmeniz gerekir.
sonraki duyuruya kadar duraklatıldı.

9

Ack'i severim .

ack --passthru somepattern filename

Grep gibi ama daha iyi. Varsayılan olarak vurgulanır ve --passthruseçenekle yalnızca eşleşen satırlar yerine tüm dosyayı (veya standart girişi) gösterir.


1
Çıktıyı ack'e, örneğin kaynağından geçirmeye çalışıyorsanız tail, --filterseçeneği de kullanmanız gerekir . Örneğin:tail -f myLogFile | ack --filter --passthru pattern
sparrowt

5

Ayrıca less(veya benzeri) kullanımını tavsiye ederim , ancak size daha didaktik bir çözüm göstermek istiyorum. Bu işlevi tanımladıktan sonra:

işlev vurgulama ()
{
    sed "s / $ 1 /` tput smso` & `tput rmso` / g" "$ {2: -}"
}

Bu şekilde kullanabilirsiniz:

command | highlight pattern
highlight pattern file.txt

Not: Bu sürüm, küçük harf duyarlıdır sadece ekleme bunu değiştirmek için isonra giçinde sedifade.


1
Ben çağırmak istiyorum tputyerine değerlerini hardcoding. Bu şekilde kullanmaktan kaçınabilirsiniz echo -e, bu da başka etkileri olabilir.
Ignacio Vazquez-Abrams

Kesinlikle haklısın, şanssız aradım. Teşekkürler.
cYrus

Bu sürüm yakalama parantezine ihtiyaç duymaz ve prog | highlight "pattern"ya highlight "pattern" file: ile çalıştırılabilir :highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
sonraki duyuruya kadar duraklatıldı.

Benim sedbecerileri temelde mevcut değildir. Hassas desen büyüklüğüne uyması için bunu nasıl değiştirmeliyim. Her neyse, bunu bash_functions dahil etmek için ekleyeceğim. Çok teşekkür ederim.
DerMike

@DerMike: Şimdi büyük / küçük harfe duyarlı.
cYrus

3

Yeterince yüksek bir değere geçmek -Cbunu grepyapacaktır.


Bunu son denediğimde başka bir şey bulduğuma yemin edebilirdim. (Her biri bağlamdaki '-----' ayırıcılarıyla eşleşir.) Şimdi bana söylediğinize göre, iyi çalışıyor :-) Teşekkürler.
DerMike

Yeterli bağlam yoksa, her maçı ayırır.
Ignacio Vazquez-Abrams

3

less deseni vurgulamakta,

less -p 'mypattern' file.txt

veya

ridiculously | long | pipe | less

ve daha sonra /vurgulanacak bir deseni aramak için.

Kenar notu:

Komutunuzu geliştirebilir, örneğin
takma ad ayarlayabilir alias grep="grep --color=tty"ve aşağıdaki gibi kullanabilirsiniz:

grep 'mypattern' file.txt;

1
GREP_OPTIONS kullanmaktan kaçınmalısınız, bunun yerine takma ad kullanın. bkz: bugs.launchpad.net/ubuntu/+bug/67141
lesmana

Primum non nocere. çıkarıldı.
Casual Coder

GREP_OPTIONS birçok form tarafından kullanılır grep(zgrep, bzgrep, bzfgrep, vb.) Bu nedenle, tüm grep formlarının tutarlı bir şekilde davranmasını istiyorsanız, her grep formu için bir takma ad ayarlamanız gerekir. @ Casual'in yukarıdaki yeni cevabı bzgrep pattern /var/log/messages.?.gz, renk vurgulamanın ÇOK yararlı olduğu bir örnek gibi bir şeyle olmayacaktır.
Stefan Lasiewski

1

Tam olarak bu amaca hizmet eden güzel bir supercat aracı var. Hem konsol çıkışınızı renklendirebilir hem de girişinizden "vurgulanmış" bir html oluşturabilir.


Teşekkürler, bu umut verici görünüyor. Ancak, şu anda çalışmasını sağlayamıyorum.
DerMike

1
/etc/supercatRenklendirme kurallarını oluşturan yapılandırma dosyalarına ( Ubuntu'da) bir göz atın, temel olarak renk / regexp çiftleridir (bazı ekstra kurallarla); man sayfası da kısa ve güzel.
Ivan Tarasov

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.