daha az içeri mi?


58

Şu anda bazı sorunları arayan pek çok yabancı günlükten geçiyorum. Baktığım ilk dosya Events.log ve en az üç sayfayla lessaynı olayı farklı zamanlarda gösteriyorum - oldukça iyi huylu görünüyor. Bu olayı filtrelemek istiyorum ve şu anda istifa lessedip böyle bir şey yapıyorum

grep -v "event text" Events.log | less

Bu şimdi, filtrelemek istediğim birçok ortak, ilginç olmayan olayı da beraberinde getiriyor. Bunu yapabilecek bir yolu var mı grep -v içeride ait less? Yapmak zorunda değil

egrep -v "event text|something else|the other thing|foo|bar" Events.log | less

Herhangi bir günlük dosyasına bakarken bana yararlı bir özellik olarak vuruyor - ve eğer lessaraç değilse, aradığım niteliklere sahip başka biri var mı? Sadece lessyerleşik bir stil görüntüleyici grep.

Yanıtlar:


91

lessçok güçlü desen eşleşmesine sahiptir. Gönderen adam sayfası :

&pattern

    Yalnızca pattern; ile eşleşen satırları göster ile eşleşmeyen satırlar pattern görüntülenmez. Eğer pattern(yazarsanız boş &hemen ardından ENTER), herhangi bir filtreleme kapatılır ve tüm satırlar görüntülenir. Filtreleme etkinken, komut isteminin başında, dosyadaki bazı satırların gizlenebileceğini hatırlatmak için bir ve işareti görüntülenir.

    Bazı karakterler / komutundaki gibi özeldir :

    ^N veya !

      Yalnızca ile eşleşmeyen satırları görüntüleyin pattern.
    ^R
      Düzenli ifade meta karakterlerini yorumlamayın; yani, basit bir metinsel karşılaştırma yapın.

    ____________
    Başına girilirse belirli karakterler özeldir pattern; bir parçası olmak yerine arama türünü değiştirirler pattern.

   (Tabii ^Nve ^Rtemsil Ctrl+ N ve Ctrl+ R, sırasıyla). 

Yani, örneğin, &dnskalıpla eşleşen satırları gösterecektir dnsve &!dnsdesen uyuşmuyor sadece çizgileri gösteren bu satırları süzmek (dışlamak) olacak.

Bu /komutun açıklamasında belirtilir:

    Sisteminiz patterntarafından sağlanan normal ifade kütüphanesi tarafından tanınan normal bir ifadedir.

Yani

  • &eth[01]eth0veya   içeren satırları göstereceketh1
  • &arp.*eth0arpardından gelen satırları göstereceketh0
  • &arp|dnsarpveya   içeren satırları gösterecekdns

Ve !kutu yukarıdakilerin herhangi birini tersine çevirebilir. Dolayısıyla, sorunuzdaki örnekte kullanmak istediğiniz komut şudur:

&!event text|something else|the other thing|foo|bar

Ayrıca ve aramak için (ve / sonraki / önceki gitmek için) kullanın./pattern?patternnN


1
Bu neredeyse orada! Olarak lesskullanarak '& <! 1stpattern>' konulu bir desenle 'gizle' hatlarına beni tanır ancak yalnızca bir seferde bir desen uygulanır, bu yüzden ikinci bir desen bulmak ve uygulamak eğer '& <! 2ndpattern>', İlk kalıba uyan ve gizlenmiş çizgiler şimdi görülebilir. Çok yakın!
kare

@forquare: Yukarı ve aşağı ok tuşlarıyla erişebileceğiniz bir komut geçmişi var. Bu yüzden tuşuna &!ve ardından bir ok tuşuna basın.
PM 2R

@forquare: Ben sadece tarihin kaydedildiğini keşfettim, bu yüzden eski kalıplarınız bir dahaki sefere koşulacak less; Yine de, yeniden başlattıktan sonra korunup korunmadığını bilmiyorum.
PM 2R

1
@orion bu eksiktiğim son bitti - desenleri nasıl biraraya getirecekti. Boru sembolünü daha önce denemiş olmama rağmen başarısız oldu, ama şimdi tekrar deniyorum! Öyleyse: &! <pattern1> | <pattern2> | <pattern3> pattern1 veya pattern2 veya pattern3 içeren satırları kaldıracak
kare

1
Bunu anladım. Homebrew dupes en son sürüme sahip. Ben sadece bash'a basmak zorunda kaldım çünkü doğru dosyayı almıyordu (ki bunun bana / kullanıcı / yerel / bin / daha azını tuttuğunu söyledi).
Spinlock

7

Bina Orion'un cevap , less(1)adam sayfası anlatılmaktadır

/pattern

    Dosyayı, içinde bulunan N. Satır için ileriye doğru arayın pattern.  N varsayılan olarak 1'dir. Bu pattern, sisteminiz tarafından sağlanan normal ifade kütüphanesi tarafından tanınan normal bir ifadedir. Arama, görüntülenen ikinci satırda başlar (ancak bunu değiştiren -ave -jseçeneklerine bakın ).

    Belirli karakterlerin başında girilirse özeldir pattern; şunların bir parçası olmak yerine arama türünü değiştirirler pattern:

    ^N veya !

      İle eşleşmeyen satırları arayın pattern.
    ^E veya *
      Birden fazla dosya arayın. Diğer bir deyişle, arama geçerli dosyanın END'sine bir eşleşme olmadan ulaşırsa, arama komut satırındaki bir sonraki dosyada devam eder.
    ^F veya @
      Aramaya, ekranda ne görüntülendiğine -aveya -jseçeneklerin ayarlarına bakılmaksızın, komut satırı listesindeki FIRST dosyasının ilk satırında başlayın .
    ^K
      patternGeçerli ekranda eşleşen herhangi bir metni vurgulayın , ancak ilk eşleşmeye geçmeyin (geçerli konumu KEEP).
    ^R
      Düzenli ifade meta karakterlerini yorumlamayın; yani, basit bir metinsel karşılaştırma yapın.

    ____________
    Komutlar , açıklamalarda N olarak adlandırılan ondalık sayısından önce gelebilir …

   (Tabii ^Nve ^Evb temsil Ctrl+ Nve Ctrl+ Evb) 

O çıkıyor ve birlikte iyi çalışıyor. Örneğin, komutlar&pattern/pattern

  • &!arp|dnsEnter
  • /Ctrl+Kfail|fatal|fault|sd[a-z][0-9]Enter

Ya sırayla yazılan, içeren tüm satırları gizlemek (dışlamak) olacak arpya da dns(gibi grep -v) ve sonra, kalan satırları, tüm oluşumları vurgulamak fail, fatal, faultSCSI aygıtı adı (benziyor, ya da bir şey sd[a-z][0-9]). İhtiva çizgiler unutmayın arpya dnsda, ve fail, veya diğer tehlike kelimelerden herhangi birini olacak değil görüntülenebilir.


2

Son birkaç ay boyunca, biraz aşina oldum fzf.

Senin durumunda, sürece bağlam gerekli değildir olarak (yani grep'in eşdeğer 's -A, -Bya -Cgerekli değildir, ve bu arada, daha az en &sonra fzf çok güçlü bir araçtır, aynı sınırlamayı vardır).

İşte aptal bir örnek:

printf "%s\n" {aa,bb,cc}{dd,ee,ff}{gg,hh,ii} | fzf

Bunu çalıştırırsanız ve benzeri girişlerle oynarsanız aa | bb dd | ee !gg !hh, neler olduğunu hızla görürsünüz.

Üzerinde Fzf belgelerine |operatörü seyrek, ama benim en iyi tahmin, sadece aslında, hemen önce şartları geçerlidir ve anlamına gelen sonradır ki VEYA önceliklidir VE (ki örtük ; bütün terimlerdir VE-ed varsayılan) . Ancak çoğu durumda bu bir sorun olmamalı ve deneyimlerime göre işler yolunda gitmiyor.

Bi dene. Ne aradığımdan tam olarak emin olmadığımda ve bağlamın önemli olmadığı durumlarda olaylara göz atma konusunda şaşırtıcı derecede yararlı olduğunu gördüm.

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.