Kelime sınırı hakkında karıştı


13

Bunu çok araştırıyorum, ama hala net değilim. Kelime sınırı ne anlama geliyor? Bu ne işe yarıyor?

Örneğin, birisi bana bu komutu açıklayabilir mi lütfen?

egrep '\b[A-Z]+\b' filename.sh

1
Bir "kelime sınırı", kullanılan aracın bu şekilde tanımladığı şeydir ... bazıları nospace / space veya space / nospace kelimelerini bir sınır olarak kabul ederken, diğerleri bir "word" den oluştuğunu düşünürler [azA-Z0-9_]. egrep(1)Kullanımdaki düzenli ifadelerin kılavuzuna , belki de belgelerine bakın.
vonbrand

Yanıtlar:


12

Açıklandığı gibi burada , örneğin, maçları arasındaki kelimeler:

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

  1. Dizedeki ilk karakterden önce, ilk karakter bir kelime karakteriyse.
  2. Dizedeki son karakterden sonra, son karakter bir kelime karakteriyse.
  3. Dizede, biri sözcük karakteri diğeri de sözcük karakteri olmayan iki karakter arasında.

İşte bu vakaların her birine örnekler:

  1. Dize foobariçin ilk durum eşleşir

     foobar
    ^-----here
    
  2. Dize foobariçin ikinci durum eşleşir

    foobar
          ^--here
    
  3. Dize foo bariçin üçüncü durum eşleşir

    foo bar
       ^--here, because space is not a word character
    

Bir kelime karakteri olarak nitelendirilen şey, belirli düzenli ifade uygulamasına bağlıdır. Ancak her durumda, harfler ( [a-z]ve [A-Z]), sayılar ( [0-9]) ve _kelime karakterleri olarak kabul edilir.


Bu nedenle, ( \b[A-Z]+\b) gönderdiğin normal ifade, iki sözcük sınırı arasındaki ve yalnızca büyük harflerden oluşan en uzun dizeyi bulmak anlamına gelir. Örnekle açıklamak daha kolay olabilir:

echo "FOOBAR" | egrep '\b[A-Z]+\b'   # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b'  # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b'   # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars

Mükemmel açıklama, sadece Solaris'in egrep(ne de /usr/xpg4/bin/egrep) \bbu şekilde davranmadığını unutmayın . Örneğin, echo "FOOBAR" | egrep '\b[A-Z]+\b'eşleşmez.
Peter

0
egrep '\b[A-Z]+\b' filename.sh

Bırakalım:

  1. [A-Z]karakter sınıfındaki herhangi bir karakteri temsil eder [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+"Büyük harf", büyük harfli karakterlerin bir veya daha fazla oluşumunu temsil eder. : Örnek maçlar olacağını A, HELLO, IS, I, ELEPHANT, vb
  3. '\bINDIA\b': tam olarak kelimeyi BÜTÜN SÖZCÜK araması gibidir INDIA. Bu olur DEĞİL maç INDIANA. Böylece aynı prensibi uygulamak - '\b[A-Z]+\b'büyük harfle bir veya daha fazla harf içeren tüm kelimeleri arar.
  4. Böylece egrep '\b[A-Z]+\b' filename.sh, dosyada büyük harf olan bir veya daha fazla harfe sahip kelimeleri arar filename.sh.

\b - tam bir kelime araması gibidir.

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.