Смущен по поводу границы слова


13

Я много исследовал это, но мне все еще не ясно это. Что означает слово граница ? Что оно делает?

Так, например, может кто-нибудь объяснить мне эту команду, пожалуйста?

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

1
«Граница слова» - это то, что используемый инструмент определяет как таковой ... некоторые считают nospace / space или space / 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.