Tüm kelime için nasıl grep yapılır


87

Alt dizinlerde bir şeyler grep etmek için aşağıdaki komutu kullanıyorum

find . | xargs grep -s 's:text'

Ancak, bu aynı zamanda şöyle şeyler de bulur <s:textfield name="sdfsf"...../>

Bundan kaçınmak için ne yapabilirim ki böyle şeyler bulsun <s:text name="sdfsdf"/>

VEYA bu konuda .... şunu da bulur <s:text somethingElse="lkjkj" name="lkkj"

temelde s:textve nameaynı satırda olmalıdır ....


29
Başlığı "tüm dünya için nasıl grep olunur" diye okuyan oldu mu?
Earlz

15
@Earlz, hayır, çoğunlukla Google'da "tüm kelimeyi grep" yaptığım için.
Luke

Yanıtlar:


104

Bunun -wbir kelimenin sonu olduğunu belirtme seçeneğinin olmasını istiyorsunuz .

find . | xargs grep -sw 's:text'


71

\bAramanızın yalnızca tam kelimelerle eşleşmesini sağlayacak "kelime sınırları" ile eşleşmek için kullanın .

Böylece grep'iniz şuna benzer

grep -r "\bSTRING\b"

renk ve çizgi numaraları eklemek de yardımcı olabilir

grep --color -rn "\bSTRING\b"

Gönderen http://www.regular-expressions.info/wordboundaries.html :

Kelime sınırları olarak nitelendirilen üç farklı konum vardır:

  • İlk karakter bir kelime karakteriyse, dizedeki ilk karakterden önce.
  • Dizedeki son karakterden sonra, son karakter bir kelime karakteriyse.
  • Birinin kelime karakteri ve diğerinin kelime karakteri olmadığı dizedeki iki karakter arasında.

28

xargsYinelemeli grep araması yaparak komutu bırakabilirsiniz . Ve normalde 's' bayrağına ihtiyacınız yoktur. Dolayısıyla:

grep -wr 's:text' 

1

rg'yi deneyebilirsiniz, https://github.com/BurntSushi/ripgrep :

rg -w 's:text' . 

yapmalı


Bu bağlantı soruyu cevaplayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir. - Yorumdan
Jibin Balachandran

4
Cevabı verdim: rg -w 's: metin'.
ms4720

1
Standart olmayan bir araç önermenin başka nedenleri olabilir, ancak bunun standartla nasıl çözüleceğine ilişkin bir soruya çözüm olarak bu grep, özellikle grepaynı seçeneğe sahip olduğu düşünüldüğünde, özellikle zorlayıcı veya tatmin edici değildir .
üçlü

Direktin ne kadar derin ve şişman olduğuna bağlı
ms4720

Dosya sayısına bağlıdır, ripgrep çok daha hızlı olabilir ve find-> xargs her dosya için yeni bir işlem oluşturur.
ms4720

0

Sadece kalan metin bölümünü filtrelemek istiyorsanız, bunu yapabilirsiniz.

xargs grep -s 's:text '

Bu, yalnızca s:textson t'den sonra boşluk içeren örnekleri bulmalıdır . s:textYalnızca bir ad öğesine sahip örnekleri bulmanız gerekiyorsa , sonuçlarınızı başka bir grepifadeye aktarın veya yalnızca ihtiyacınız olan öğeleri filtrelemek için normal ifadeyi kullanın.


ya "metin" çıktının sonundaysa? Çözümünüzde atlanmayacak mı?
pkuszewski
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.