Плутати про межу слова


13

Я багато цього досліджував, але все ще не зрозумів. Що означає межа слова ? Що це робить?

Так, наприклад, хтось міг би мені пояснити цю команду?

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

1
"Межа слів" - це те, що використовуваний інструмент визначає як таке ... деякі вважають, що простір / простір або простір / nospace є межею слова, інші вважають "слово" складеним [azA-Z0-9_]. Перевірте посібник щодо egrep(1), можливо, дументації щодо регулярних виразів у використанні.
vonbrand

Відповіді:


12

Як описано тут , наприклад, воно співпадає між словами:

Є три різні позиції, які можна визначити як межі слів:

  1. Перед першим символом у рядку, якщо перший символ є символом слова.
  2. Після останнього символу в рядку, якщо останній символ є символом слова.
  3. Між двома символами в рядку, де один є символом слова, а другий - символом слова.

Ось приклади кожного з цих випадків:

  1. Для рядка foobarвідповідає перший випадок

     foobar
    ^-----here
    
  2. Для рядка foobarвідповідає другий випадок

    foobar
          ^--here
    
  3. Для рядка foo barбуде відповідати третій випадок

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

Те, що кваліфікується як символ слова, залежить від конкретного виконання регулярних виразів. Однак у всіх випадках букви ( [a-z]і [A-Z]), цифри ( [0-9]) і _вважаються символами слова.


Отже, приклад регулярного вираження, який ви розмістили ( \b[A-Z]+\b), означає знайти найдовший рядок, який знаходиться між двома межами слова і складається лише з великих літер. Це може бути простіше пояснити на прикладі:

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

Відмінне пояснення, просто зауважте, що Соляріс egrep(ні /usr/xpg4/bin/egrep) не ставиться до \bцього. Наприклад, echo "FOOBAR" | egrep '\b[A-Z]+\b'не відповідав би.
Петро

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

Дозволяємо розбити це:

  1. [A-Z]представляє будь-який один символ у класі символів [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+являє собою одне або більше зустрічань символів верхнього регістру. Приклад матчі будуть: A, HELLO, IS, I, ELEPHANTі т.д.
  3. '\bINDIA\b': точно так, як ВСЕ СЛОВО шукає слово INDIAу верхньому регістрі. Це НЕ відповідало б INDIANA. Таким чином, застосовуючи той же принцип - '\b[A-Z]+\b'шукайте цілі слова, що мають одну чи кілька літер у верхньому регістрі.
  4. Таким чином, egrep '\b[A-Z]+\b' filename.shслід шукати слова, що містять одну або кілька літер у верхньому регістрі у файлі - filename.sh.

\b - це точно як пошук усього слова.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.